# app_script_history

id: 6181f31ec76eefddf45ea44f
scriptid: 6181ea0bc76eefddf45ea1e5
tablename: app_script
clientip: 192.168.1.97
username: sa
createdate: 2021.11.03 10:27:29.000
script:
function main(arg) {

    println(arg);
    var p = JSON.parse(arg);
   
    var gguid = p.gguid;
    var topic = "打包下载" + gguid;
     
    var ds=newDataStore("","select * from dzpz_dy");
    ds.setUpdateProperty("dzpz_dy" , "id","*","id");
    ds.retrieve(" id='"+gguid+"'");
    ds.setValue(0,"ziptaskid","");
    ds.setValue(0,"zipresult", JSON.stringify(p.zipFiles));
    ds.update(true);
      
    pushMessage(topic,  {action:"gameOver",  result:p}, -1);

}


id: 6182322bb99039290d429069
scriptid: 6181e49ac76eefddf45ea05a
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:07:19.000
script:
function main(arg) {

    println(arg);
    var p = JSON.parse(arg);
    var watermark = p.watermark; //水印
    var ids = p.ids;
    var gguid = p.gguid;
    var topic = "打包下载" + gguid;

    var source = [];
    for (var i = 0; i < ids.length; i++) {
        println((i + 1) + "  " + ids[i]);
        var t = "*凭证归档检测。完成" + ((i + 1) * 100.0 / ids.length) + "%";
        println(t);
        pushMessage(topic,  {action:"info", info:  t}, -1);
        delay(10);
        var t = createArchive("dzpz", ids[i], "", false);//把没有归档的归档一下，已经归档的不要重复归档
        println(JSON.stringify(t));
        source.push(t.data);
    }



    println(JSON.stringify(source));
    pushMessage(topic, {action:"info", info: "*正在压缩" }, -1);
    var ret = createZipFileTask(p.fileName,
        source,
        watermark,
        1, //每个压缩文件的源文件大小合计不超过 mb 数 
        3,  //放到第3个文件服务器下
        "调阅打包/" + formatDate(newDate(), "yyyy/MM/dd"),//存放子目录
        "后台打包中",
        "后台打包完成",
        "后台打包异常",
        { table: "dzpz_dy", 
          gguid: gguid ,

        }
    );


    println(JSON.stringify(ret));
    return ret;

}


id: 618238feb99039290d42912d
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:34:21.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult = JSON.parse(zipResult);
    $$q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setVaue(row, zipResult[i]);
    }

    book.getWorkSheet('下载清单').popup("下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 618238feb99039290d429136
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:34:41.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult = JSON.parse(zipResult);
    $$q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setVaue(row, zipResult[i]);
    }

    book.getWorkSheet('下载清单').popup("下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61823be9b99039290d42917c
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:37:18.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setVaue(row, zipResult[i]);
    }

    book.getWorkSheet('下载清单').popup("下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61823be9b99039290d429189
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:45:02.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setVaue(row, "url", one.url);
        $q_result_ds.setVaue(row, "filename", one.fileName);
        $q_result_ds.setVaue(row, "filesize", one.fileSize);
        
    }

    book.getWorkSheet('下载清单').popup("下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61823be9b99039290d429192
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:48:26.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one.url);
       
        
    }

    book.getWorkSheet('下载清单').popup("下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61823be9b99039290d42919b
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:49:33.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one.url);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61823be9b99039290d4291a1
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:50:18.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 618240a2b99039290d4291a7
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:56:19.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult= zipResult.replace(/&action=view/g , '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 618240a2b99039290d4291ad
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.03 15:58:53.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult= zipResult.replace(/&action=view/g , '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader")  +
                formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61832b7799328c3820c0d120
scriptid: 6183205499328c3820c0c8f1
tablename: app_template
clientip: 10.255.0.2
username: sa
createdate: 2021.11.04 08:39:15.000
script:
var pzh_prefix;
var pzh_length;

var fullScreenDiv = null;



function formOpen() {
    book.showTabOnWhere = 'none';
    //加载帐套信息及年月
    var corpid = book.sheet0.cells("corpid").getValueString();
    runTask("当前记帐期", { corpid: corpid }, function (ym) {
        if (ym == null || ym == 'null') return;
        //得到年月后，获取凭证号相关设置
        pzh_len = getPZHLen(corpid);

        book.sheet0.cells("ym").setValue(ym);

        pzh_prefix = getPZHPrefix(corpid, ym);
        book.sheet0.cells("pzh_prefix").setValue(pzh_prefix);


    });

    // 追加一些CSS类 ，用于凭证号标记
    $(document.body).append(`<style>
                        .pzh {position:absolute;left:0;bottom:0px; 
                                height:24px; line-height:24px;width:100%; 
                                background-color:#40af40a0; 
                                color:white;font-weight:bold;font-size:12px;text-align:center;}
                        .delete_pzh { position:absolute; right:0; width:40px; height:14px; top:0; text-align:right; 
                                    vertical-align:top; font-size:12px; color:gray;padding-right:5px;}      
                        .delete_pzh:hover { color:white;}      
                          
                        </style>
                    `);


}

function cb_check_onClick() {
    smartRetrieve(book.sheet0, "pzh_check", true, false, function () { //检索完后回调
        if ($pzh_check_ds.rowCount == 0) {
            toastr.success("凭证号检测通过");

        } else {
            book.sheet3.popup('fa fa-cog', '缺失的凭证', 250, 350, true, true, {});
        }
    });
}


/**
 * 多行结果集当前焦点行发生变化
 * @param dsname  结果集名称
 * @param row  行号
 */
function currentBindRowChanged(dsname, row) {
    if (dsname == 'dzpz_pz') {
        //重新加载凭证图片列表

        let id = $dzpz_pz_ds.getString(row, "id");
        let pzh = $dzpz_pz_ds.getString(row, "pzh");
        loadPZ(pzh, id);

    }
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'ym') {
        var corpid = book.sheet0.cells("corpid").getValueString();
        var ym = book.sheet0.cells("ym").getValue();

        pzh_prefix = getPZHPrefix(corpid, ym);
        book.sheet0.cells("pzh_prefix").setValue(pzh_prefix);
    }




}

function loadPZ(pzh, id) {
    let data = getPZFJ(id); //得到凭证的所有图片
    let FJ = book.sheet2.getBrick('FJ');
    FJ.buildGridly(data, function () {
        let shortPZH = pzh.substring(pzh_prefix.length);
        //加载图片完成后， 如果是凭证，那么加上凭证号信息
        for (let i = 0; i < data.length; i++) {
            if (data[i].groupname == '凭证') {
                setPZH(data[i].id, shortPZH, false);
            }
        }

    });
    book.sheet2.yOffset = 0; //垂直卷滚条归位
}


//@comment (group=凭证号,caption=设置图片的凭证号,needRightControl=false)
function setPZH(id, pzh, needDeleteButton) {
    if (needDeleteButton == undefined) needDeleteButton = true
    find_pzh(id, true, needDeleteButton).find('.no').text(pzh);
}

//@comment (group=凭证号,caption=查找或创建凭证号标记对象,needRightControl=false)
function find_pzh(id, create_if_not_exists, needDeleteButton) {

    if (needDeleteButton == undefined) needDeleteButton = true;

    var d = $('#' + id);
    if (!d) {
        $.alert(id + "不存在");
        return null;
    }

    var ret = d.find('.pzh');
    if (ret.length == 0) {
        if (create_if_not_exists) //如果需要创建，则创建它
        {
            d.append(`<div class="pzh" >
                        <div class="no"></div>
                        <div class="delete_pzh"  ${needDeleteButton ? "" : " style='display:none' "} ><i class="fa fa-close" onclick="removePZH('${id}');  event.preventDefault(); event.stopPropagation();"> </i></div>
                      </div>`);
        }
        ret = d.find('.pzh');
    }
    return ret;

}



/**
 * 单元格单击事件
 * @param sheet
 * @param cell
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行被点击
 * @param event 事件对象
 */
//@comment (group=单元格事件,caption=单元格点击)
function cellOnClick(sheet, cell, innerRow, event) {

    //通过别名来判断
    if (cell.alias == 'XXX') {

    }

    //通过数据库绑定情况来判断
    let bind = cell.bind;
    if (bind != null && bind.dataSource == 'dzpz_pz') {
        if (bind.DBCol == 'c_sh1') {
            if ($dzpz_pz_ds.getInt(innerRow, "verifierid") != 0) return; //已审核，不要再审核
            do_sh1(innerRow);
        }
        if (bind.DBCol == 'c_sh2') {
            if ($dzpz_pz_ds.getInt(innerRow, "verifierid") == 0) return; //没有审核，不需要取消审核
            do_sh2(innerRow);
        }
    }

}

//@comment (group=工具函数,caption=全选或取消全选)
function seletOrUnSelectAll() {
    //让selection单元格失去编辑焦点，不然再点击，它不会触发单元格的点击事件，因为此时点击的编辑框对象，不会触发单元格的点击
    book.sheet1.View.forceCurrentEditControlGiveUpFocus();

    var v = book.sheet1.cells('selection').getValueInt();

    book.sheet1.paintPermit = false;
    $dzpz_pz_ds.setValueWithTrigger = false;
    for (var i = 0; i < $dzpz_pz_ds.rowCount; i++) {
        $dzpz_pz_ds.setValue(i, "selected", v);
    }
    $dzpz_pz_ds.setValueWithTrigger = true;
    book.sheet1.paintPermit = true;
}


id: 61832b7799328c3820c0d126
scriptid: 6183205499328c3820c0c8f1
tablename: app_template
clientip: 10.255.0.2
username: sa
createdate: 2021.11.04 08:44:32.000
script:
var pzh_prefix;
var pzh_length;

var fullScreenDiv = null;



function formOpen() {
    book.showTabOnWhere = 'none';
    //加载帐套信息及年月
    var corpid = book.getWorkSheet("filter").cells("corpid").getValueString();
    runTask("当前记帐期", { corpid: corpid }, function (ym) {
        if (ym == null || ym == 'null') return;
        //得到年月后，获取凭证号相关设置
        pzh_len = getPZHLen(corpid);

        book.getWorkSheet("filter").cells("ym").setValue(ym);

        pzh_prefix = getPZHPrefix(corpid, ym);
        book.getWorkSheet("filter").cells("pzh_prefix").setValue(pzh_prefix);


    });

    // 追加一些CSS类 ，用于凭证号标记
    $(document.body).append(`<style>
                        .pzh {position:absolute;left:0;bottom:0px; 
                                height:24px; line-height:24px;width:100%; 
                                background-color:#40af40a0; 
                                color:white;font-weight:bold;font-size:12px;text-align:center;}
                        .delete_pzh { position:absolute; right:0; width:40px; height:14px; top:0; text-align:right; 
                                    vertical-align:top; font-size:12px; color:gray;padding-right:5px;}      
                        .delete_pzh:hover { color:white;}      
                          
                        </style>
                    `);


}



/**
 * 多行结果集当前焦点行发生变化
 * @param dsname  结果集名称
 * @param row  行号
 */
function currentBindRowChanged(dsname, row) {
    if (dsname == 'dzpz_pz') {
        //重新加载凭证图片列表

        let id = $dzpz_pz_ds.getString(row, "id");
        let pzh = $dzpz_pz_ds.getString(row, "pzh");
        loadPZ(pzh, id);

    }
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'ym') {
        var corpid = book.getWorkSheet("filter").cells("corpid").getValueString();
        var ym = book.getWorkSheet("filter").cells("ym").getValue();

        pzh_prefix = getPZHPrefix(corpid, ym);
        book.getWorkSheet("filter").cells("pzh_prefix").setValue(pzh_prefix);
    }




}

function loadPZ(pzh, id) {
    let data = getPZFJ(id); //得到凭证的所有图片
    let FJ = book.getWorkSheet("凭证详情").getBrick('FJ');
    FJ.buildGridly(data, function () {
        let shortPZH = pzh.substring(pzh_prefix.length);
        //加载图片完成后， 如果是凭证，那么加上凭证号信息
        for (let i = 0; i < data.length; i++) {
            if (data[i].groupname == '凭证') {
                setPZH(data[i].id, shortPZH, false);
            }
        }

    });
    book.getWorkSheet("凭证详情").yOffset = 0; //垂直卷滚条归位
}


//@comment (group=凭证号,caption=设置图片的凭证号,needRightControl=false)
function setPZH(id, pzh, needDeleteButton) {
    if (needDeleteButton == undefined) needDeleteButton = true
    find_pzh(id, true, needDeleteButton).find('.no').text(pzh);
}

//@comment (group=凭证号,caption=查找或创建凭证号标记对象,needRightControl=false)
function find_pzh(id, create_if_not_exists, needDeleteButton) {

    if (needDeleteButton == undefined) needDeleteButton = true;

    var d = $('#' + id);
    if (!d) {
        $.alert(id + "不存在");
        return null;
    }

    var ret = d.find('.pzh');
    if (ret.length == 0) {
        if (create_if_not_exists) //如果需要创建，则创建它
        {
            d.append(`<div class="pzh" >
                        <div class="no"></div>
                        <div class="delete_pzh"  ${needDeleteButton ? "" : " style='display:none' "} ><i class="fa fa-close" onclick="removePZH('${id}');  event.preventDefault(); event.stopPropagation();"> </i></div>
                      </div>`);
        }
        ret = d.find('.pzh');
    }
    return ret;

}



/**
 * 单元格单击事件
 * @param sheet
 * @param cell
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行被点击
 * @param event 事件对象
 */
//@comment (group=单元格事件,caption=单元格点击)
function cellOnClick(sheet, cell, innerRow, event) {

    //通过别名来判断
    if (cell.alias == 'XXX') {

    }

    //通过数据库绑定情况来判断
    let bind = cell.bind;
    if (bind != null && bind.dataSource == 'dzpz_pz') {
        if (bind.DBCol == 'c_sh1') {
            if ($dzpz_pz_ds.getInt(innerRow, "verifierid") != 0) return; //已审核，不要再审核
            do_sh1(innerRow);
        }
        if (bind.DBCol == 'c_sh2') {
            if ($dzpz_pz_ds.getInt(innerRow, "verifierid") == 0) return; //没有审核，不需要取消审核
            do_sh2(innerRow);
        }
    }

}

//@comment (group=工具函数,caption=全选或取消全选)
function seletOrUnSelectAll() {
    //让selection单元格失去编辑焦点，不然再点击，它不会触发单元格的点击事件，因为此时点击的编辑框对象，不会触发单元格的点击
    book.getWorkSheet("list").View.forceCurrentEditControlGiveUpFocus();

    var v = book.getWorkSheet("list").cells('selection').getValueInt();

    book.getWorkSheet("list").paintPermit = false;
    $dzpz_pz_ds.setValueWithTrigger = false;
    for (var i = 0; i < $dzpz_pz_ds.rowCount; i++) {
        $dzpz_pz_ds.setValue(i, "selected", v);
    }
    $dzpz_pz_ds.setValueWithTrigger = true;
    book.getWorkSheet("list").paintPermit = true;
}


id: 61832b7799328c3820c0d12c
scriptid: 6183205499328c3820c0c8f1
tablename: app_template
clientip: 10.255.0.2
username: sa
createdate: 2021.11.04 08:45:03.000
script:
var pzh_prefix;
var pzh_length;

var fullScreenDiv = null;



function formOpen() {
    book.showTabOnWhere = 'none';
    //加载帐套信息及年月
    var corpid = book.getWorkSheet("filter").cells("corpid").getValueString();
    runTask("当前记帐期", { corpid: corpid }, function (ym) {
        if (ym == null || ym == 'null') return;
        //得到年月后，获取凭证号相关设置
        pzh_len = getPZHLen(corpid);

        book.getWorkSheet("filter").cells("ym").setValue(ym);

        pzh_prefix = getPZHPrefix(corpid, ym);
        book.getWorkSheet("filter").cells("pzh_prefix").setValue(pzh_prefix);


    });

    // 追加一些CSS类 ，用于凭证号标记
    $(document.body).append(`<style>
                        .pzh {position:absolute;left:0;bottom:0px; 
                                height:24px; line-height:24px;width:100%; 
                                background-color:#40af40a0; 
                                color:white;font-weight:bold;font-size:12px;text-align:center;}
                        .delete_pzh { position:absolute; right:0; width:40px; height:14px; top:0; text-align:right; 
                                    vertical-align:top; font-size:12px; color:gray;padding-right:5px;}      
                        .delete_pzh:hover { color:white;}      
                          
                        </style>
                    `);


}



/**
 * 多行结果集当前焦点行发生变化
 * @param dsname  结果集名称
 * @param row  行号
 */
function currentBindRowChanged(dsname, row) {
    if (dsname == 'dzpz_pz') {
        //重新加载凭证图片列表

        let id = $dzpz_pz_ds.getString(row, "id");
        let pzh = $dzpz_pz_ds.getString(row, "pzh");
        loadPZ(pzh, id);

    }
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'ym') {
        var corpid = book.getWorkSheet("filter").cells("corpid").getValueString();
        var ym = book.getWorkSheet("filter").cells("ym").getValue();

        pzh_prefix = getPZHPrefix(corpid, ym);
        book.getWorkSheet("filter").cells("pzh_prefix").setValue(pzh_prefix);
    }




}

function loadPZ(pzh, id) {
    let data = getPZFJ(id); //得到凭证的所有图片
    let FJ = book.getWorkSheet("凭证详情").getBrick('FJ');
    FJ.buildGridly(data, function () {
        let shortPZH = pzh.substring(pzh_prefix.length);
        //加载图片完成后， 如果是凭证，那么加上凭证号信息
        for (let i = 0; i < data.length; i++) {
            if (data[i].groupname == '凭证') {
                setPZH(data[i].id, shortPZH, false);
            }
        }

    });
    book.getWorkSheet("凭证详情").yOffset = 0; //垂直卷滚条归位
}


//@comment (group=凭证号,caption=设置图片的凭证号,needRightControl=false)
function setPZH(id, pzh, needDeleteButton) {
    if (needDeleteButton == undefined) needDeleteButton = true
    find_pzh(id, true, needDeleteButton).find('.no').text(pzh);
}

//@comment (group=凭证号,caption=查找或创建凭证号标记对象,needRightControl=false)
function find_pzh(id, create_if_not_exists, needDeleteButton) {

    if (needDeleteButton == undefined) needDeleteButton = true;

    var d = $('#' + id);
    if (!d) {
        $.alert(id + "不存在");
        return null;
    }

    var ret = d.find('.pzh');
    if (ret.length == 0) {
        if (create_if_not_exists) //如果需要创建，则创建它
        {
            d.append(`<div class="pzh" >
                        <div class="no"></div>
                        <div class="delete_pzh"  ${needDeleteButton ? "" : " style='display:none' "} ><i class="fa fa-close" onclick="removePZH('${id}');  event.preventDefault(); event.stopPropagation();"> </i></div>
                      </div>`);
        }
        ret = d.find('.pzh');
    }
    return ret;

}



/**
 * 单元格单击事件
 * @param sheet
 * @param cell
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行被点击
 * @param event 事件对象
 */
//@comment (group=单元格事件,caption=单元格点击)
function cellOnClick(sheet, cell, innerRow, event) {

    //通过别名来判断
    if (cell.alias == 'XXX') {

    }

    //通过数据库绑定情况来判断
    let bind = cell.bind;
    if (bind != null && bind.dataSource == 'dzpz_pz') {
        
    }

}

//@comment (group=工具函数,caption=全选或取消全选)
function seletOrUnSelectAll() {
    //让selection单元格失去编辑焦点，不然再点击，它不会触发单元格的点击事件，因为此时点击的编辑框对象，不会触发单元格的点击
    book.getWorkSheet("list").View.forceCurrentEditControlGiveUpFocus();

    var v = book.getWorkSheet("list").cells('selection').getValueInt();

    book.getWorkSheet("list").paintPermit = false;
    $dzpz_pz_ds.setValueWithTrigger = false;
    for (var i = 0; i < $dzpz_pz_ds.rowCount; i++) {
        $dzpz_pz_ds.setValue(i, "selected", v);
    }
    $dzpz_pz_ds.setValueWithTrigger = true;
    book.getWorkSheet("list").paintPermit = true;
}


id: 61833426a152ad03d5899ecc
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 09:40:12.000
script:
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            $.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult= zipResult.replace(/&action=view/g , '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader")  +
                formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt (0, "needwatermark")==0? "":   $dzpz_dy_ds.getString(0, "watermark")  
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61833426a152ad03d5899ed4
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 09:47:15.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);

    if (userTask.id == '6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select distinct pz_id from  dzpz_dymx where gguid='" + gguid + " order by inner_xh");
    $dzpz_dymx_ds.retrieve();

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') continue;
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });


    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61833426a152ad03d5899edc
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 09:47:30.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);

    if (userTask.id == '6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select distinct pz_id from  dzpz_dymx where gguid='" + gguid + " order by inner_xh");
    $dzpz_dymx_ds.retrieve();

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') continue;
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });


    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61833426a152ad03d5899ee4
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 09:50:38.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));

    if (userTask.id == '6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select distinct pz_id from  dzpz_dymx where gguid='" + gguid + " order by inner_xh");
    $dzpz_dymx_ds.retrieve();

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') continue;
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });


    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61833ca6a152ad03d5899f05
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 09:52:59.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));

    if (userTask.id == 'id_6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select distinct pz_id from  dzpz_dymx where gguid='" + gguid + " order by inner_xh");
    $dzpz_dymx_ds.retrieve();

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') continue;
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });


    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61833ca6a152ad03d5899f11
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 10:12:07.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));

    if (userTask.id == 'id_6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select distinct pz_id from  dzpz_dymx where gguid='" + gguid + "' order by inner_xh");
    $dzpz_dymx_ds.retrieve();

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') continue;
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });


    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61833ca6a152ad03d5899f19
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 10:14:06.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));

    if (userTask.id == 'id_6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select distinct pz_id from  dzpz_dymx where gguid='" + gguid + "' order by inner_xh");
    $dzpz_dymx_ds.retrieve();
    println( $dzpz_dymx_ds.getSelectLastRetrieved() );

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') continue;
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });


    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61833ca6a152ad03d5899f21
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 10:17:46.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));

    if (userTask.id == 'id_6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select  pz_id from  dzpz_dymx where gguid='" + gguid + "' order by pzh ");
    $dzpz_dymx_ds.retrieve();
    println( $dzpz_dymx_ds.getSelectLastRetrieved() );

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        var pz_id  = ''+$dzpz_dymx_ds.getString(i, "pz_id");
        if( pz_id  == '') continue;
        if( ids.contains( pz_id)) continue;
        ids.push( pz_id );
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });


    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61833ca6a152ad03d5899f2c
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 10:38:11.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));

    if (userTask.id == 'id_6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select  pz_id from  dzpz_dymx where gguid='" + gguid + "' order by pzh ");
    $dzpz_dymx_ds.retrieve();
    println( $dzpz_dymx_ds.getSelectLastRetrieved() );

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        var pz_id  = ''+$dzpz_dymx_ds.getString(i, "pz_id");
        if( pz_id  == '') continue;
        if( ids.contains( pz_id)) continue;
        ids.push( pz_id );
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    println( ids.length+"张凭证需要打包");

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });

    println( ret); 
    ret =JSON.parse(ret); 
    
    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61836c8f9d9070d29f86fa9f
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 13:58:00.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));
    println( gguid);

    if (userTask.id == 'id_6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select  pz_id from  dzpz_dymx where gguid='" + gguid + "' order by pzh ");
    $dzpz_dymx_ds.retrieve();
    println( $dzpz_dymx_ds.getSelectLastRetrieved() );

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        var pz_id  = ''+$dzpz_dymx_ds.getString(i, "pz_id");
        if( pz_id  == '') continue;
        if( ids.contains( pz_id)) continue;
        ids.push( pz_id );
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    println( ids.length+"张凭证需要打包");

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });

    println( ret); 
    ret =JSON.parse(ret); 
    
    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
}


id: 61838c34f80e9a6b4ee38dc4
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 15:44:10.000
script:
var g_currentUserIsOwner=false; //当前人是不是起草人
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    if( currentUserId()== $dzpz_dy_ds.getInt(0,"userid"))
    {
        g_currentUserIsOwner=true; 
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if( g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if( ziptaskid!='')
    {
        toastr.info("正在压缩中，请稍候");
        return;
    }
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult= zipResult.replace(/&action=view/g , '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader")  +
                formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt (0, "needwatermark")==0? "":   $dzpz_dy_ds.getString(0, "watermark")  
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61838c34f80e9a6b4ee38dcd
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 15:46:42.000
script:
var g_currentUserIsOwner=false; //当前人是不是起草人
/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;

    if( currentUserId()== $dzpz_dy_ds.getInt(0,"userid"))
    {
        g_currentUserIsOwner=true; 
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if( g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));

             
            $dzpz_dy_ds.setValue(0,"ziptaskid",'',false);//清除打包任务id，因为已经ok了，但不要触发保存
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if( ziptaskid!='')
    {
        toastr.info("正在压缩中，请稍候");
        return;
    }
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult= zipResult.replace(/&action=view/g , '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader")  +
                formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt (0, "needwatermark")==0? "":   $dzpz_dy_ds.getString(0, "watermark")  
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61838c34f80e9a6b4ee38dd6
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 15:51:30.000
script:
var g_currentUserIsOwner=false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible=false;



    if( dzpz_dy_ds.getString (0,"ziptaskid")=='')
    {
        book.sheet1.getBrick('cb_cancel').visible=false;
    }

    if( currentUserId()== $dzpz_dy_ds.getInt(0,"userid"))
    {
        g_currentUserIsOwner=true; 
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if( g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));

             
            $dzpz_dy_ds.setValue(0,"ziptaskid",'',false);//清除打包任务id，因为已经ok了，但不要触发保存
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if( ziptaskid!='')
    {
        toastr.info("正在压缩中，请稍候");
        return;
    }
    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    zipResult= zipResult.replace(/&action=view/g , '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one=zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row,  one);
       
        
    }

    book.getWorkSheet('下载清单').popup("","下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader")  +
                formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt (0, "needwatermark")==0? "":   $dzpz_dy_ds.getString(0, "watermark")  
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61838c34f80e9a6b4ee38ddc
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 15:56:52.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }
            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 6183929ff80e9a6b4ee38e45
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:01:29.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    form.save(false);
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件");
                do_package( currentGUID());    
                return;
            }
            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 6183929ff80e9a6b4ee38e4b
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:01:35.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    form.save(false);
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID());    
                return;
            }
            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839399f80e9a6b4ee38e75
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:04:10.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); //不需要保存 ，因为打包完成脚本中已经回填了
            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    form.save(false);
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID());    
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839399f80e9a6b4ee38e7b
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:04:33.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); 

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    form.save(false);
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID());    
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839399f80e9a6b4ee38e81
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:04:36.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); 

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    form.save(false);
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID());    
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839399f80e9a6b4ee38e87
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:06:06.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); 

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    form.save(false);
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID());    
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839399f80e9a6b4ee38e8d
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:06:51.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); 

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    $dzpz_dy_ds.setValue(0, "zipresult", ''); 
                    
                    form.save(false);
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID());    
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839399f80e9a6b4ee38e93
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:07:34.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); 

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    $dzpz_dy_ds.setValue(0, "zipresult", ''); 
                    
                    form.save(false);
                    hideInfoPane();
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID());    
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839693f80e9a6b4ee38f16
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:15:16.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); 

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    $dzpz_dy_ds.setValue(0, "zipresult", ''); 
                    
                    form.save(false);
                    hideInfoPane();
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID(),function(){});    
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839693f80e9a6b4ee38f1c
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:15:31.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
             $dzpz_dy_ds.setValue(0,"zipresult", JSON.stringify( result.zipFiles),false); 

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if( ret.success)
                {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ''); 
                    $dzpz_dy_ds.setValue(0, "zipresult", ''); 
                    
                    form.save(false);
                    hideInfoPane();
                }else
                {
                    toastr.error( ret.message);
                }
            });

    });
}

function cb_package_onClick() {

            var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
            if (ziptaskid != '') {
                toastr.info("正在压缩中，请稍候");
                return;
            }

            var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
            if( zipResult=='')
            {
                toastr.info("正在压缩文件，请稍候");
                do_package( currentGUID(),function(){});    //加一个空的回调让它异步
                return;
            }

            zipResult = zipResult.replace(/&action=view/g, '&action=download');
            zipResult = JSON.parse(zipResult);
            $q_result_ds.reset();
            for (var i = 0; i < zipResult.length; i++) {
                var one = zipResult[i];
                var row = $q_result_ds.insertRow(999);
                $q_result_ds.setValue(row, one);


            }

            book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
        }



function cb_package_onClick___() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要打包下载吗?', function () {
                showInfoPane("*正在压缩打包...");
                let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
                runTask("打包下载", {
                    fileName: fileName,
                    gguid: currentGUID(),
                    ids: ids,
                    watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                        formatDate(newDate(), "yyyy.MM.dd HH:mm")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            let t = window.location.href;
                            let p = t.indexOf("billedit");
                            t = t.substring(0, p);
                            let url = t + ret.url;
                            $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
            // if (form.isSaveNeeded()) {
            //     toastr.info("请先保存");
            //     return;
            // }
            book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: '70%', height: '90%' });
            smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
        }

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

            //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

            //通过别名来判断
            if (cell.alias == 'st_seletedall') {
                for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                    $q_pzdjex_ds.setValue(i, "selected", newValue);
                }
            }
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
                    $dzpz_dymx_ds.setValue(row, {
                        pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                        memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
                    });
                }
            }
            //********删除行号***********************************
            book.getWorkSheet("凭证资料查询").paintPermit = false;
            for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
                if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
            }
            book.getWorkSheet("凭证资料查询").paintPermit = true;
            //**************************************************

            book.getWorkSheet("detail").paintPermit = true;
        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
            book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
                {
                    my: 'right-center',
                    at: 'right-center',
                    autoposition: 'down',
                    offsetX: -5,
                    offsetY: 5
                }, { width: 400, height: '80%' });

        }

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

            book.getWorkSheet("detail").paintPermit = false;
            let row = book.getDataSource("dzpz_dymx").currentBindRow;

            let pzlist = sheet.cells('pzlist').getValueString().split('\n');
            for (let i = 0; i < pzlist.length; i++) {
                if (pzlist[i] !== '') {
                    if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

                    $dzpz_dymx_ds.setValue(row, {
                        pzh: pzlist[i]
                    });
                }
            }
            sheet.cells('pzlist').setValue(null);
            sheet.floatPanelClose();

            book.getWorkSheet("detail").paintPermit = true;

        }






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

            if (form.isSaveNeeded()) {
                toastr.info("请先保存");
                return;
            }

            let ids = [];
            for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
                if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
                    toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
                    return;
                }
                ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
            }

            if (ids.length == 0) {
                toastr.info("没有凭证清单");
                return;
            }

            $confirm('', '确信要重新打包吗?', function () {
                showInfoPane("*正在后台打包...");
                let fileName = $dzpz_dy_ds.getString(0, "reader") +
                    formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
                runTask("后台打包", {
                    gguid: currentGUID(),
                    fileName: fileName,
                    ids: ids,
                    watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
                },
                    function (ret) {
                        ret = JSON.parse(ret);
                        hideInfoPane();
                        if (ret.success) {
                            $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                            form.save(false);
                            hideInfoPane();

                        } else {
                            toastr.error(ret.message);
                        }
                    });

            });


        }


id: 61839693f80e9a6b4ee38f2e
scriptid: 60fa600f9932563b7c99baff
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:17:08.000
script:
/**
 * 单据点击保存，前端所有的操作被转译成3种操作:insert , delete , update ,
 *  并且可以在  beforeBillSaveOnServer 中返回一些SQL语句，可以在afterBillSaveOnServer中返回一些SQL语句
 *
 * 系统分别在需要的数据库连接中执行这些语句 ， 当所有语句执行成功后，事件被提交。一些细节如下 ：
 *
 * 1 如果单据中的表，属于不同的数据库连接，那么所有的SQL语句会以连接为单位，对语句进行批量执行
 * 2 这些语句的执行顺序是：对同一个数据库连接中的语句， 先执行 beforeBillSaveOnServer 中返回的SQL语句，再执行单据操作转译得到的SQL语句，
 *   再执行 afterBillSaveOnServer 中返回的SQL语句， 当多个（或一个）数据库连接执行完这些语句，且没有错误时，所有的数据库连接做提交，否则全部回滚
 * 3 不要在 beforeBillSaveOnServer 或 afterBillSaveOnServer 中直接执行数据库操作，而是返回SQL语句，让系统批量执行它们，并控制好事务
 * 4 当执行成功后，系统再执行事件函数  afterBillSaveSuccessfulOnServer 。 此事件中可以执行任意操作，它与单据保存事件结束后才被触发执行，
 *   与单据保存并不在一个事务中。
 *
 *
 * @param gguid  要删除记录的gguid ，等同于主表的id
 * @param session  一个JSON对象，用于在整个单据保存过程中的各个事件之间传递数据。本事件做为单据保存的最后一个事件，session对象在使用后将被丢弃
 *
 *
 * @return 本函数不需要返回值
 *
 */
function afterBillSaveSuccessfulOnServer(gguid, session) {

    var corpid = getStringFromSQL("select corpid from dzpz_dy where id='" + gguid + "'");
    var sqls = ["update dzpz_dymx  set bz=null,pz_id= (select id from dzpz_pz where dzpz_pz.pzh= dzpz_dymx.pzh ) where gguid='" + gguid + "' ",
    "update dzpz_dymx  set bz='凭证号不存在' where  gguid='" + gguid + "' and not exists (select dzpz_pz.id from dzpz_pz where  dzpz_pz.pzh= dzpz_dymx.pzh  and dzpz_pz.corpid='" + corpid + "')  "
    ];

    runSQL("", sqls, true);

}


/**
 * 用户任务提交后
 * @param flow 流程定义
 * @param node 开始节点
 * @param gguid 单据的gguid

 */
//@comment (group=工作流事件,caption=用户任务提交后)
function onUserTaskSubmitted(flow, userTask, gguid) {
    // println( flow.id) ; //流程定义的ID
    // println( userTask.name);
    println( JSON.stringify(userTask));
    println( gguid);

    if (userTask.id == 'id_6655df8bedc641aa9bacf1720d13ce2d') //领导审批通过后，就开始打包
    {
        //领导审批通过后，就开始打包
        do_package(gguid);
    }

    println(gguid + " " + userTask.name + " 提交完成")


}

//后台打包
function do_package(gguid) {
    var ids = [];
    var $dzpz_dymx_ds = newDataStore("", "select  pz_id from  dzpz_dymx where gguid='" + gguid + "' order by pzh ");
    $dzpz_dymx_ds.retrieve();
    println( $dzpz_dymx_ds.getSelectLastRetrieved() );

    for (var i = 0; i < $dzpz_dymx_ds.getRowCount(); i++) {
        var pz_id  = ''+$dzpz_dymx_ds.getString(i, "pz_id");
        if( pz_id  == '') continue;
        if( ids.contains( pz_id)) continue;
        ids.push( pz_id );
    }

    if (ids.length == 0) {
        println("没有凭证清单");
        return;
    }

    println( ids.length+"张凭证需要打包");

    var $dzpz_dy_ds = newDataStore("", "select * from  dzpz_dy where gguid='" + gguid + "'");
    $dzpz_dy_ds.setUpdateProperty("dzpz_dy", "id", "*", "id");
    $dzpz_dy_ds.retrieve();

    var fileName = $dzpz_dy_ds.getString(0, "reader") + formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";

    var ret = runTask("后台打包", {
        gguid: gguid,
        fileName: fileName,
        ids: ids,
        watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
    });

    println( ret); 
    ret =JSON.parse(ret); 
    
    if (ret.success) {
        $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
        $dzpz_dy_ds.update(true);
    }
    return  ret ; 
}


id: 61839693f80e9a6b4ee38f3c
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:18:46.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
            $dzpz_dy_ds.setValue(0, "zipresult", JSON.stringify(result.zipFiles), false);

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", '');
                    $dzpz_dy_ds.setValue(0, "zipresult", '');

                    form.save(false);
                    hideInfoPane();
                } else {
                    toastr.error(ret.message);
                }
            });

    });
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if (ziptaskid != '') {
        toastr.info("正在压缩中，请稍候");
        return;
    }

    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    if (zipResult == '') {
        toastr.info("正在压缩文件，请稍候");
        do_package(currentGUID(), function (ret) {
            ret = JSON.parse(ret);
            if (ret.success) {
                $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId, false); //后台已经回写了，就里只要界面上更新就ok
            }
        } );
        return;
    }

    zipResult = zipResult.replace(/&action=view/g, '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one = zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row, one);


    }

    book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader") +
            formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61839693f80e9a6b4ee38f42
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:19:33.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
            $dzpz_dy_ds.setValue(0, "zipresult", JSON.stringify(result.zipFiles), false);

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", '');
                    $dzpz_dy_ds.setValue(0, "zipresult", '');

                    form.save(false);
                    hideInfoPane();
                } else {
                    toastr.error(ret.message);
                }
            });

    });
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if (ziptaskid != '') {
        toastr.info("正在压缩中...，请稍候");
        return;
    }

    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    if (zipResult == '') {
        toastr.info("正在压缩文件，请稍候");
        do_package(currentGUID(), function (ret) {
            ret = JSON.parse(ret);
            if (ret.success) {
                $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId, false); //后台已经回写了，就里只要界面上更新就ok
            }
        });
        return;
    }

    zipResult = zipResult.replace(/&action=view/g, '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one = zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row, one);


    }

    book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader") +
            formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61839693f80e9a6b4ee38f4d
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:22:16.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
            if (g_currentUserIsOwner) showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
            $dzpz_dy_ds.setValue(0, "zipresult", JSON.stringify(result.zipFiles), false);

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", '');
                    $dzpz_dy_ds.setValue(0, "zipresult", '');

                    form.save(false);
                    hideInfoPane();
                } else {
                    toastr.error(ret.message);
                }
            });

    });
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if (ziptaskid != '') {
        toastr.info("正在压缩中...，请稍候");
        return;
    }

    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    if (zipResult == '') {
        toastr.info("正在压缩文件，请稍候");
        do_package(currentGUID(), function (ret) {
          
            if (ret.success) {
                $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId, false); //后台已经回写了，就里只要界面上更新就ok
            }
        });
        return;
    }

    zipResult = zipResult.replace(/&action=view/g, '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one = zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row, one);


    }

    book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader") +
            formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61839693f80e9a6b4ee38f5a
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:23:52.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
              showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
            $dzpz_dy_ds.setValue(0, "zipresult", JSON.stringify(result.zipFiles), false);

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", '');
                    $dzpz_dy_ds.setValue(0, "zipresult", '');

                    form.save(false);
                    hideInfoPane();
                } else {
                    toastr.error(ret.message);
                }
            });

    });
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if (ziptaskid != '') {
        toastr.info("正在压缩中...，请稍候");
        return;
    }

    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    if (zipResult == '') {
        toastr.info("正在压缩文件，请稍候");
        do_package(currentGUID(), function (ret) {
          
            if (ret.success) {
                $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId, false); //后台已经回写了，就里只要界面上更新就ok
            }
        });
        return;
    }

    zipResult = zipResult.replace(/&action=view/g, '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one = zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row, one);


    }

    book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader") +
            formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61839693f80e9a6b4ee38f62
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:26:39.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if (dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        console.info(info);
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
              showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
            $dzpz_dy_ds.setValue(0, "zipresult", JSON.stringify(result.zipFiles), false);

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", '');
                    $dzpz_dy_ds.setValue(0, "zipresult", '');

                    form.save(false);
                    hideInfoPane();
                } else {
                    toastr.error(ret.message);
                }
            });

    });
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if (ziptaskid != '') {
        toastr.info("正在压缩中...，请稍候");
        return;
    }

    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    if (zipResult == '') {
        toastr.info("正在压缩文件，请稍候");
        do_package(currentGUID(), function (ret) {
          
            if (ret.success) {
                $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId, false); //后台已经回写了，就里只要界面上更新就ok
            }
        });
        return;
    }

    zipResult = zipResult.replace(/&action=view/g, '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one = zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row, one);


    }

    book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader") +
            formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


id: 61839bf4f80e9a6b4ee38fea
scriptid: 617f9bba99328c3820c0c07e
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:38:40.000
script:
function main()
{

   // chatWith( 1 , "工工工工工工工工工" ) ;

   var gguid='6181e1dac76ee5afc5389218';
 
 var topic = "打包下载" + gguid;
     
    pushMessage(topic,  {action:"info", info:  newDate()  }, -1);

}


id: 61839bf4f80e9a6b4ee39005
scriptid: 617f9bba99328c3820c0c07e
tablename: app_script
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:40:12.000
script:
function main()
{

    chatWith( 1 , "工工工工工工工工工" ) ;

   var gguid='6181e1dac76ee5afc5389218';
 
 var topic = "打包下载" + gguid;
     
    pushMessage(topic,  {action:"info", info:  newDate()  }, -1);

}


id: 61839bf4f80e9a6b4ee39010
scriptid: 60fa600f9932563b7c99bb03
tablename: app_template
clientip: 192.168.1.77
username: sa
createdate: 2021.11.04 16:44:37.000
script:
var g_currentUserIsOwner = false; //当前人是不是起草人




/**
 * 表单初始化完成后，执行此事件
 */
//@comment (group=表单事件,caption=表单初始化完成)
function formOpen() {
    book.showTabOnWhere = 'none';
    book.getWorkSheet('下载清单').visible = false;



    if ($dzpz_dy_ds.getString(0, "ziptaskid") == '') {
        book.sheet1.getBrick('cb_cancel').visible = false;
    }

    if (currentUserId() == $dzpz_dy_ds.getInt(0, "userid")) {
        g_currentUserIsOwner = true;
    }
    //按gguid分开接收消息，避免多个打包的消息混在一起
    onPushMessage("打包下载" + currentGUID(), function (info) {
        console.info(info);
        var msg = JSON.parse(info);
        if (msg.action == 'info') {
            console.info(msg.info);
              showInfoPane(msg.info);
        }

        if (msg.action == 'gameOver') {
            var result = msg.result;
            //$.alert(JSON.stringify(result));


            $dzpz_dy_ds.setValue(0, "ziptaskid", '', false);//清除打包任务id，因为已经ok了，但不要触发保存
            //不需要保存 ，因为打包完成脚本中已经回填了，仅在界面上回填一下， 方便显示下载清单
            $dzpz_dy_ds.setValue(0, "zipresult", JSON.stringify(result.zipFiles), false);

            console.dir(result);

            hideInfoPane();
        }
        if (msg.action == 'over') {

            hideInfoPane();
        }

        if (msg.action == 'error') {
            $.alert(msg.info);
            hideInfoPane();
        }
    })

    $('.navbar-fixed-top').css("z-index", 1);

}
/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_downloadTemplateFile_onClick(sheet, cell, button) {
    var title = "序号\t凭证号";
    var data = [];
    data.push(title);
    data.push("1\t0001");
    data.push("2\t0002");

    var f = $('#form_toexcel')[0];
    f.filename.value = "模板.xlsx";
    f.data.value = JSON.stringify(data);
    f.submit();

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_importFromExcelFile_onClick(sheet, cell, button) {
    toastr.info("*自动保存，准备导入");
    form.save(false, function () {
        book.readXLS(function (data) {
            showInfoPane("*正在导入");
            setTimeout(function () {
                importData(data);
            }, 10);
        });
    });

}



function safeValue(sheet, row, col) {
    if (row > sheet.length - 1) return null;
    var dataRow = sheet[row];
    if (dataRow == null) return null;
    if (col > dataRow.length - 1) return null;
    return dataRow[col];

}

//@comment (group=,caption=从Excel导入数据,needRightControl=false)
function importData(excelData) {
    var excelSheet = excelData[Object.keys(excelData)[0]];


    var headRow = 0; //题头在第几行
    var dataStartRow = 1;// 数据行从第几行开始

    var RC = excelSheet.length;

    book.sheet0.paintPermit = false;

    for (let row = dataStartRow; row < RC; row++) {
        let pzh = safeValue(excelSheet, row, 1) || '';
        if (pzh == '') continue;

        let r = $dzpz_dymx_ds.insertRow(99999);
        $dzpz_dymx_ds.setValue(r, "pzh", pzh);
    }


    showInfoPane("*正在保存并检测凭证号");
    form.save(false, function () {


        book.sheet0.paintPermit = false;
        toastr.info("导入完成");

    });
}




var dymx_changed = false;
/**
 * dsname结果集保存前，对row进行数据校验 ，
 * @param dsname 结果集名称
 * @param row  第row行
 * @returns {boolean} true表示检验通过， false表示校验不通过，update被终止
 */
function validate(dsname, row) {
    if (dsname == 'dzpz_dymx') dymx_changed = true;
    return true;
}

/**
 * 数据集中的数据发生变化
 * @param dsname 数据集名称
 * @param row   数据行号
 * @param col    字段名
 * @param oldValue   原值
 * @param newValue  新值
 */
function itemChanged(dsname, row, col, oldValue, newValue) {
    if (col == 'corpid') dymx_changed = true;

}



/**
 * 单据保存成功后执行本事件。如果单据不需要保存，或保存失败，则不执行本事件
 * @param GUID 当前单据的GGUID
 * @param action 当前单据正在进行的动作，比如 edit , view
 */
function afterSaveSuccessful(GGUID, action) {
    if (dymx_changed) form.loadBill(GGUID); //如果明细有变化，那么保存成功后，重新加载单据，因为在单据保存后，模板后端脚本中会同时更新  pz_id 及 bz
    dymx_changed = false;
}


function cb_cancel_onClick() {

    $confirm('', '确信要终止打包吗?', function () {
        showInfoPane("*正在终止打包...");
        runTask("终止打包", {
            id: $dzpz_dy_ds.getString(0, "ziptaskid")
        },
            function (ret) {
                ret = JSON.parse(ret);
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", '');
                    $dzpz_dy_ds.setValue(0, "zipresult", '');

                    form.save(false);
                    hideInfoPane();
                } else {
                    toastr.error(ret.message);
                }
            });

    });
}

function cb_package_onClick() {

    var ziptaskid = $dzpz_dy_ds.getString(0, "ziptaskid");
    if (ziptaskid != '') {
        toastr.info("正在压缩中...，请稍候");
        return;
    }

    var zipResult = $dzpz_dy_ds.getString(0, "zipresult");
    if (zipResult == '') {
        toastr.info("正在压缩文件，请稍候");
        do_package(currentGUID(), function (ret) {
          
            if (ret.success) {
                $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId, false); //后台已经回写了，就里只要界面上更新就ok
            }
        });
        return;
    }

    zipResult = zipResult.replace(/&action=view/g, '&action=download');
    zipResult = JSON.parse(zipResult);
    $q_result_ds.reset();
    for (var i = 0; i < zipResult.length; i++) {
        var one = zipResult[i];
        var row = $q_result_ds.insertRow(999);
        $q_result_ds.setValue(row, one);


    }

    book.getWorkSheet('下载清单').popup("", "下载清单", 600, 400, true, true);
}



function cb_package_onClick___() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要打包下载吗?', function () {
        showInfoPane("*正在压缩打包...");
        let fileName = formatDate(newDate(), "yyyyMMddHHmm") + ".zip";
        runTask("打包下载", {
            fileName: fileName,
            gguid: currentGUID(),
            ids: ids,
            watermark: $dzpz_dy_ds.getString(0, "billno") + "[" + $dzpz_dy_ds.getString(0, "reader") + "]" +
                formatDate(newDate(), "yyyy.MM.dd HH:mm")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    let t = window.location.href;
                    let p = t.indexOf("billedit");
                    t = t.substring(0, p);
                    let url = t + ret.url;
                    $.alert(` <a href="${url}" target="_blank">点击下载${fileName}</a>`, `打包完成`);
                } else {
                    toastr.error(ret.message);
                }
            });

    });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_pzlist_onClick(sheet, cell, button) {
    // if (form.isSaveNeeded()) {
    //     toastr.info("请先保存");
    //     return;
    // }
    book.getWorkSheet("凭证资料查询").float('fa fa-cog', "凭证资料查询",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: '70%', height: '90%' });
    smartRetrieve(book.getWorkSheet("凭证资料查询"), "q_pzdjex")
}

/**
 * 单元格的值发生了改变
 * @param sheet  所在的工作表
 * @param cell  单元格对象
 * @param oldValue  原先的值
 * @param newValue 变化后的值
 * @param innerRow   当单元格没有绑定数据库或绑定到单行数据库时，本参数无意义。如果绑定一个
 * 多行数据库，则表示该单元所绑定的字段的第 innerRow行发生变化
 */
function cellValueChanged(sheet, cell, oldValue, newValue, innerRow) {

    //如果是绑定了数据库的，强烈不建议使用本事件，换用结果集变化事件 itemChanged

    //通过别名来判断
    if (cell.alias == 'st_seletedall') {
        for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
            $q_pzdjex_ds.setValue(i, "selected", newValue);
        }
    }
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=调取,needRightControl=false)
function cb_import_onClick(sheet, cell, button) {
    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    for (var i = 0; i < $q_pzdjex_ds.getRowCount(); i++) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);
            $dzpz_dymx_ds.setValue(row, {
                pzh: $q_pzdjex_ds.getValue(i, "pzh"),
                memo: iif($q_pzdjex_ds.getString(i, "code") != "", "核算账号编号：" + $q_pzdjex_ds.getString(i, "code"), null)
            });
        }
    }
    //********删除行号***********************************
    book.getWorkSheet("凭证资料查询").paintPermit = false;
    for (var i = $q_pzdjex_ds.getRowCount() - 1; i >= 0; i--) {
        if ($q_pzdjex_ds.getString(i, "selected") == '1') $q_pzdjex_ds.deleteRow(i);
    }
    book.getWorkSheet("凭证资料查询").paintPermit = true;
    //**************************************************

    book.getWorkSheet("detail").paintPermit = true;
}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
function cb_opensheet_dr_onClick(sheet, cell, button) {
    book.getWorkSheet("凭证列表").float('fa fa-cog', "导入凭证列表",
        {
            my: 'right-center',
            at: 'right-center',
            autoposition: 'down',
            offsetX: -5,
            offsetY: 5
        }, { width: 400, height: '80%' });

}

/**
 * 按钮点击事件
 * 当某个按钮被点击时， 首先触发  {按钮名称}_onClick 事件，然后触发 buttonOnClick事件
 * @param sheet  工作表
 * @param cell   按钮所在的单元格
 * @param button 按钮对象
 */
//@comment (group=,caption=粘贴界面导入,needRightControl=false)
function cb_dr_onClick(sheet, cell, button) {

    book.getWorkSheet("detail").paintPermit = false;
    let row = book.getDataSource("dzpz_dymx").currentBindRow;

    let pzlist = sheet.cells('pzlist').getValueString().split('\n');
    for (let i = 0; i < pzlist.length; i++) {
        if (pzlist[i] !== '') {
            if ($dzpz_dymx_ds.getString(row, "pzh") != '') row = $dzpz_dymx_ds.insertRow(99999);

            $dzpz_dymx_ds.setValue(row, {
                pzh: pzlist[i]
            });
        }
    }
    sheet.cells('pzlist').setValue(null);
    sheet.floatPanelClose();

    book.getWorkSheet("detail").paintPermit = true;

}






//@comment (group=,caption=异步打包,needRightControl=false)
function async_package() {

    if (form.isSaveNeeded()) {
        toastr.info("请先保存");
        return;
    }

    let ids = [];
    for (let i = 0; i < $dzpz_dymx_ds.rowCount; i++) {
        if ($dzpz_dymx_ds.getString(i, "pz_id") == '') {
            toastr.error("第" + (i + 1) + "行的凭证号不存在，请核对");
            return;
        }
        ids.push($dzpz_dymx_ds.getString(i, "pz_id"));
    }

    if (ids.length == 0) {
        toastr.info("没有凭证清单");
        return;
    }

    $confirm('', '确信要重新打包吗?', function () {
        showInfoPane("*正在后台打包...");
        let fileName = $dzpz_dy_ds.getString(0, "reader") +
            formatDate(newDate(), "yyyy.MM.dd HH:mm") + "调阅凭证.zip";
        runTask("后台打包", {
            gguid: currentGUID(),
            fileName: fileName,
            ids: ids,
            watermark: $dzpz_dy_ds.getInt(0, "needwatermark") == 0 ? "" : $dzpz_dy_ds.getString(0, "watermark")
        },
            function (ret) {
                ret = JSON.parse(ret);
                hideInfoPane();
                if (ret.success) {
                    $dzpz_dy_ds.setValue(0, "ziptaskid", ret.zipTaskId);
                    form.save(false);
                    hideInfoPane();

                } else {
                    toastr.error(ret.message);
                }
            });

    });


}


