feat(clgl): 完善材料匹配与入库条码查询
通过按材料编码优化库存匹配并增加条码查询入口,减少材料主编码选择歧义,便于按项目追溯入库条码。
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
SET XACT_ABORT ON;
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @MenuId NVARCHAR(50) = N'74048E7D-C9D3-45A1-B985-DCE1DB5723F5';
|
||||
DECLARE @InPlanMenuId NVARCHAR(50) = N'324C72AF-447A-4308-AFB7-ABF788C58240';
|
||||
DECLARE @SuperMenu NVARCHAR(50);
|
||||
DECLARE @MenuType NVARCHAR(50);
|
||||
DECLARE @IsOffice BIT;
|
||||
|
||||
SELECT
|
||||
@SuperMenu = SuperMenu,
|
||||
@MenuType = MenuType,
|
||||
@IsOffice = IsOffice
|
||||
FROM dbo.Sys_Menu
|
||||
WHERE MenuId = @InPlanMenuId;
|
||||
|
||||
IF @SuperMenu IS NULL
|
||||
BEGIN
|
||||
RAISERROR(N'未找到“入库申请”菜单,无法确定入库条码查询菜单位置。', 16, 1);
|
||||
ROLLBACK TRANSACTION;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM dbo.Sys_Menu WHERE MenuId = @MenuId)
|
||||
BEGIN
|
||||
INSERT INTO dbo.Sys_Menu
|
||||
(MenuId, MenuName, Icon, Url, SortIndex, SuperMenu, MenuType, IsOffice, IsEnd, IsUsed)
|
||||
VALUES
|
||||
(@MenuId, N'入库条码查询', NULL, N'CLGL/InputBarCodeQuery.aspx',
|
||||
30, @SuperMenu, @MenuType, @IsOffice, 1, 1);
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.Sys_Menu
|
||||
SET MenuName = N'入库条码查询',
|
||||
Url = N'CLGL/InputBarCodeQuery.aspx',
|
||||
SortIndex = 30,
|
||||
SuperMenu = @SuperMenu,
|
||||
MenuType = @MenuType,
|
||||
IsEnd = 1,
|
||||
IsUsed = 1
|
||||
WHERE MenuId = @MenuId;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Sys_RolePower (RolePowerId, RoleId, MenuId, MenuType, IsOffice)
|
||||
SELECT CONVERT(NVARCHAR(50), NEWID()), source.RoleId, @MenuId, @MenuType, source.IsOffice
|
||||
FROM dbo.Sys_RolePower source
|
||||
WHERE source.MenuId = @InPlanMenuId
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Sys_RolePower target
|
||||
WHERE target.RoleId = source.RoleId
|
||||
AND target.MenuId = @MenuId
|
||||
);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
@@ -149,18 +149,89 @@ namespace BLL
|
||||
}
|
||||
}
|
||||
|
||||
// 以下三个集合只服务于“按材料 Code 挑选材料主编码”的场景:
|
||||
// remainingRequiredNumByCode:当前明细及后续明细的剩余总需求;
|
||||
// stocksByCode:同一 Code 下所有可用的材料主编码库存;
|
||||
// usedMaterialCodesByCode:本轮匹配已经使用过的材料主编码,用于优先继续消耗其余量。
|
||||
Dictionary<string, decimal> remainingRequiredNumByCode = null;
|
||||
Dictionary<string, List<Tw_MaterialStockOutput>> stocksByCode = null;
|
||||
Dictionary<string, HashSet<string>> usedMaterialCodesByCode = null;
|
||||
if (matchByMaterialCodeLibCode)
|
||||
{
|
||||
// 按 Code 汇总全部需求,选择新主编码时可判断一个库存能否覆盖剩余需求。
|
||||
remainingRequiredNumByCode = requiredMaterials
|
||||
.Where(x => !string.IsNullOrEmpty(x.MaterialCode))
|
||||
.GroupBy(x => x.MaterialCode)
|
||||
.ToDictionary(x => x.Key, x => x.Sum(y => y.NeedNum ?? 0));
|
||||
|
||||
// 出库申请预扣后,仅保留仍有可用数量的主编码库存。
|
||||
stocksByCode = stockList
|
||||
.Where(x => !string.IsNullOrEmpty(x.Code) && (x.StockNum ?? 0) > 0)
|
||||
.GroupBy(x => x.Code)
|
||||
.ToDictionary(x => x.Key, x => x.ToList());
|
||||
|
||||
// 每个 Code 独立记录已经启用的主编码,避免不同材料之间相互影响。
|
||||
usedMaterialCodesByCode = stocksByCode.ToDictionary(x => x.Key, x => new HashSet<string>());
|
||||
}
|
||||
|
||||
foreach (var material in requiredMaterials)
|
||||
{
|
||||
material.Id = Guid.NewGuid().ToString();
|
||||
// 材料导入只保存材料编码 Code,匹配时按 Code 从库存中挑选实际材料主编码 PipeLineMatCode。
|
||||
var stock = matchByMaterialCodeLibCode
|
||||
? stockList
|
||||
.Where(x => x.Code == material.MaterialCode && (x.StockNum ?? 0) > 0)
|
||||
// 优先选择库存能覆盖本条需求的材料主编码,再按主编码稳定排序,保证匹配结果可复现。
|
||||
.OrderByDescending(x => (x.StockNum ?? 0) >= (material.NeedNum ?? 0))
|
||||
.ThenBy(x => x.PipeLineMatCode)
|
||||
.FirstOrDefault()
|
||||
: stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode);
|
||||
Tw_MaterialStockOutput stock = null;
|
||||
if (matchByMaterialCodeLibCode)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(material.MaterialCode) && stocksByCode.ContainsKey(material.MaterialCode))
|
||||
{
|
||||
decimal needNum = material.NeedNum ?? 0;
|
||||
decimal remainingRequiredNum = remainingRequiredNumByCode[material.MaterialCode];
|
||||
// StockNum 会在每条明细匹配后原地扣减,这里读取的是本轮实时剩余库存。
|
||||
var candidates = stocksByCode[material.MaterialCode]
|
||||
.Where(x => (x.StockNum ?? 0) > 0)
|
||||
.ToList();
|
||||
var usedMaterialCodes = usedMaterialCodesByCode[material.MaterialCode];
|
||||
|
||||
// 第一优先级:复用已使用且能完整满足当前明细的主编码,减少主编码种类;
|
||||
// 在多个已用主编码都满足时,选择库存最小的,使其更接近用完。
|
||||
stock = candidates
|
||||
.Where(x => usedMaterialCodes.Contains(x.PipeLineMatCode) && (x.StockNum ?? 0) >= needNum)
|
||||
.OrderBy(x => x.StockNum ?? 0)
|
||||
.ThenBy(x => x.PipeLineMatCode)
|
||||
.FirstOrDefault()
|
||||
// 第二优先级:启用一个能覆盖剩余总需求的新主编码,保证后续仍只使用这一种主编码;
|
||||
// 若有多个可选,选择库存最小的,减少最终余料。
|
||||
?? candidates
|
||||
.Where(x => !usedMaterialCodes.Contains(x.PipeLineMatCode) && (x.StockNum ?? 0) >= remainingRequiredNum)
|
||||
.OrderBy(x => x.StockNum ?? 0)
|
||||
.ThenBy(x => x.PipeLineMatCode)
|
||||
.FirstOrDefault()
|
||||
// 第三优先级:无法一次覆盖剩余总需求时,选择刚好能满足当前明细且余量最小的新主编码。
|
||||
?? candidates
|
||||
.Where(x => !usedMaterialCodes.Contains(x.PipeLineMatCode) && (x.StockNum ?? 0) >= needNum)
|
||||
.OrderBy(x => x.StockNum ?? 0)
|
||||
.ThenBy(x => x.PipeLineMatCode)
|
||||
.FirstOrDefault()
|
||||
// 所有库存都不足以完整满足当前明细时,选择库存最大的主编码以保证匹配量最大;
|
||||
// 库存相同时优先已使用的主编码,最后按主编码排序保证结果稳定。
|
||||
?? candidates
|
||||
.OrderByDescending(x => x.StockNum ?? 0)
|
||||
.ThenByDescending(x => usedMaterialCodes.Contains(x.PipeLineMatCode))
|
||||
.ThenBy(x => x.PipeLineMatCode)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (stock != null)
|
||||
{
|
||||
usedMaterialCodes.Add(stock.PipeLineMatCode);
|
||||
}
|
||||
// 当前明细处理完后,只保留后续明细的总需求供下一轮选码判断。
|
||||
remainingRequiredNumByCode[material.MaterialCode] -= needNum;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 旧调用传入的是材料主编码,保持原来的精确匹配逻辑。
|
||||
stock = stockList.FirstOrDefault(x => x.PipeLineMatCode == material.MaterialCode);
|
||||
}
|
||||
var thisMaterialStockNum = stock?.StockNum ?? 0;
|
||||
if (thisMaterialStockNum >= material.NeedNum)
|
||||
{
|
||||
|
||||
@@ -39,13 +39,16 @@ namespace BLL
|
||||
(string.IsNullOrEmpty(table.Id) || x.Id.Contains(table.Id)) &&
|
||||
(string.IsNullOrEmpty(table.InputDetailId) || x.InputDetailId.Contains(table.InputDetailId)) &&
|
||||
(string.IsNullOrEmpty(table.InputMasterId) || x.InputMasterId.Contains(table.InputMasterId)) &&
|
||||
(string.IsNullOrEmpty(table.MaterialCode) || x.MaterialCode.Contains(table.MaterialCode))
|
||||
(string.IsNullOrEmpty(table.ProjectId) || master.ProjectId == table.ProjectId) &&
|
||||
(string.IsNullOrEmpty(table.MaterialCode) || x.MaterialCode.Contains(table.MaterialCode)) &&
|
||||
(string.IsNullOrEmpty(table.BarCode) || x.BarCode.Contains(table.BarCode))
|
||||
orderby master.CusBillCode, x.MaterialCode, x.Id
|
||||
select new Tw_InputDetailBarCodeOutput
|
||||
{
|
||||
Id = x.Id,
|
||||
InputDetailId = x.InputDetailId,
|
||||
InputMasterId = x.InputMasterId,
|
||||
ProjectId = master.ProjectId,
|
||||
CusBillCode = master.CusBillCode,
|
||||
MaterialCode = x.MaterialCode,
|
||||
Code = mat.Code,
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/// </summary>
|
||||
public static Model.MaterialCodeLibBarCodeOutput GetBarCodeMaterialInfo(string barCode)
|
||||
{
|
||||
return (from detailBarCode in Funs.DB.Tw_InputDetailBarCode
|
||||
var result= (from detailBarCode in Funs.DB.Tw_InputDetailBarCode
|
||||
join x in Funs.DB.HJGL_MaterialCodeLib on detailBarCode.MaterialCode equals x.MaterialCode
|
||||
where detailBarCode.BarCode == barCode
|
||||
select new Model.MaterialCodeLibBarCodeOutput
|
||||
@@ -36,6 +36,24 @@
|
||||
BarCode = detailBarCode.BarCode,
|
||||
Quantity = detailBarCode.Quantity
|
||||
}).FirstOrDefault();
|
||||
|
||||
if (result==null)
|
||||
{
|
||||
result = (from x in Funs.DB.HJGL_MaterialCodeLib
|
||||
where x.MaterialCode == barCode
|
||||
select new Model.MaterialCodeLibBarCodeOutput
|
||||
{
|
||||
MaterialCode = x.MaterialCode,
|
||||
Code = x.Code,
|
||||
HeatNo = x.HeatNo,
|
||||
BatchNo = x.BatchNo,
|
||||
MaterialName = x.MaterialName,
|
||||
MaterialDef = x.MaterialDef,
|
||||
MaterialSpec = x.MaterialSpec,
|
||||
MaterialUnit = x.MaterialUnit
|
||||
}).FirstOrDefault();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="InputBarCodeQuery.aspx.cs" Inherits="FineUIPro.Web.CLGL.InputBarCodeQuery" %>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head runat="server">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>入库条码查询</title>
|
||||
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
|
||||
<style type="text/css">
|
||||
.f-grid-row .f-grid-cell-inner {
|
||||
white-space: normal;
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
|
||||
<f:Panel ID="Panel1" runat="server" Margin="5px" BodyPadding="5px" ShowBorder="false"
|
||||
ShowHeader="false" Layout="VBox" BoxConfigAlign="Stretch">
|
||||
<Items>
|
||||
<f:Grid ID="Grid1" runat="server" BoxFlex="1" ShowBorder="true" ShowHeader="false"
|
||||
Title="入库条码查询" DataKeyNames="Id" DataIDField="Id" EnableColumnLines="true"
|
||||
EnableTextSelection="true" AllowPaging="true" IsDatabasePaging="true" PageSize="20"
|
||||
OnPageIndexChange="Grid1_PageIndexChange" OnRowCommand="Grid1_RowCommand" AllowColumnLocking="true">
|
||||
<Toolbars>
|
||||
<f:Toolbar ID="Toolbar1" Position="Top" runat="server">
|
||||
<Items>
|
||||
<f:TextBox ID="txtMaterialCode" runat="server" Label="材料主编码" LabelWidth="100px"
|
||||
LabelAlign="Right" Width="300px" EmptyText="请输入材料主编码"></f:TextBox>
|
||||
<f:TextBox ID="txtBarCode" runat="server" Label="条码内容" LabelWidth="80px"
|
||||
LabelAlign="Right" Width="300px" EmptyText="请输入条码内容"></f:TextBox>
|
||||
<f:ToolbarFill ID="ToolbarFill1" runat="server"></f:ToolbarFill>
|
||||
<f:Button ID="btnSearch" runat="server" Text="查询" Icon="SystemSearch" OnClick="btnSearch_Click"></f:Button>
|
||||
</Items>
|
||||
</f:Toolbar>
|
||||
</Toolbars>
|
||||
<Columns>
|
||||
<f:TemplateField ColumnID="tfNumber" Width="50px" HeaderText="序号" HeaderTextAlign="Center" TextAlign="Center">
|
||||
<ItemTemplate>
|
||||
<asp:Label ID="lblNumber" runat="server" Text='<%# Grid1.PageIndex * Grid1.PageSize + Container.DataItemIndex + 1 %>'></asp:Label>
|
||||
</ItemTemplate>
|
||||
</f:TemplateField>
|
||||
<f:RenderField Width="220px" ColumnID="CusBillCode" DataField="CusBillCode" SortField="CusBillCode"
|
||||
FieldType="String" HeaderText="入库单编号" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="180px" ColumnID="MaterialCode" DataField="MaterialCode" SortField="MaterialCode"
|
||||
FieldType="String" HeaderText="材料主编码" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="150px" ColumnID="Code" DataField="Code" SortField="Code"
|
||||
FieldType="String" HeaderText="材料编码" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="120px" ColumnID="HeatNo" DataField="HeatNo" SortField="HeatNo"
|
||||
FieldType="String" HeaderText="炉号" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="120px" ColumnID="BatchNo" DataField="BatchNo" SortField="BatchNo"
|
||||
FieldType="String" HeaderText="批号" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="150px" ColumnID="MaterialName" DataField="MaterialName" SortField="MaterialName"
|
||||
FieldType="String" HeaderText="材料名称" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="150px" ColumnID="MaterialSpec" DataField="MaterialSpec" SortField="MaterialSpec"
|
||||
FieldType="String" HeaderText="规格" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="100px" ColumnID="MaterialUnit" DataField="MaterialUnit" SortField="MaterialUnit"
|
||||
FieldType="String" HeaderText="单位" TextAlign="Center" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="300px" ColumnID="BarCode" DataField="BarCode" SortField="BarCode"
|
||||
FieldType="String" HeaderText="条码内容" TextAlign="Left" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:RenderField Width="100px" ColumnID="Quantity" DataField="Quantity" SortField="Quantity"
|
||||
FieldType="String" HeaderText="数量" TextAlign="Right" HeaderTextAlign="Center"></f:RenderField>
|
||||
<f:LinkButtonField Width="120px" ColumnID="btnBarCodePrint" TextAlign="Center"
|
||||
CommandName="btnBarCodePrint" Text="入库条码打印" Locked="true" />
|
||||
</Columns>
|
||||
<PageItems>
|
||||
<f:ToolbarSeparator ID="ToolbarSeparator1" runat="server"></f:ToolbarSeparator>
|
||||
<f:ToolbarText ID="ToolbarText1" runat="server" Text="每页记录数:"></f:ToolbarText>
|
||||
<f:DropDownList ID="ddlPageSize" runat="server" Width="80px" AutoPostBack="true"
|
||||
OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
|
||||
<f:ListItem Text="10" Value="10" />
|
||||
<f:ListItem Text="20" Value="20" />
|
||||
<f:ListItem Text="50" Value="50" />
|
||||
<f:ListItem Text="100" Value="100" />
|
||||
</f:DropDownList>
|
||||
</PageItems>
|
||||
</f:Grid>
|
||||
</Items>
|
||||
</f:Panel>
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
function printByHiddenFrame(url) {
|
||||
var frameId = 'fastreport-print-frame-' + new Date().getTime();
|
||||
var frame = document.createElement('iframe');
|
||||
frame.id = frameId;
|
||||
frame.name = frameId;
|
||||
frame.style.position = 'fixed';
|
||||
frame.style.left = '-10000px';
|
||||
frame.style.top = '-10000px';
|
||||
frame.style.width = '1px';
|
||||
frame.style.height = '1px';
|
||||
frame.style.border = '0';
|
||||
frame.style.opacity = '0';
|
||||
frame.onload = function () {
|
||||
setTimeout(function () {
|
||||
try {
|
||||
frame.contentWindow.onafterprint = cleanupPrintFrame;
|
||||
frame.contentWindow.focus();
|
||||
frame.contentWindow.print();
|
||||
} catch (e) {
|
||||
window.print();
|
||||
}
|
||||
}, 500);
|
||||
};
|
||||
frame.src = url;
|
||||
document.body.appendChild(frame);
|
||||
var cleaned = false;
|
||||
function cleanupPrintFrame() {
|
||||
if (cleaned) {
|
||||
return;
|
||||
}
|
||||
cleaned = true;
|
||||
if (frame && frame.parentNode) {
|
||||
frame.parentNode.removeChild(frame);
|
||||
}
|
||||
window.removeEventListener('afterprint', cleanupPrintFrame);
|
||||
}
|
||||
window.addEventListener('afterprint', cleanupPrintFrame);
|
||||
setTimeout(cleanupPrintFrame, 300000);
|
||||
}
|
||||
window.addEventListener('message', function (event) {
|
||||
if (!event.data || event.data.type !== 'fastreport-print-finished') {
|
||||
return;
|
||||
}
|
||||
var frame = document.getElementById(event.data.frameId);
|
||||
if (frame && frame.parentNode) {
|
||||
frame.parentNode.removeChild(frame);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,84 @@
|
||||
using BLL;
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
|
||||
namespace FineUIPro.Web.CLGL
|
||||
{
|
||||
public partial class InputBarCodeQuery : PageBase
|
||||
{
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack)
|
||||
{
|
||||
ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
|
||||
BindGrid();
|
||||
}
|
||||
}
|
||||
|
||||
private void BindGrid()
|
||||
{
|
||||
var query = new Model.Tw_InputDetailBarCodeOutput
|
||||
{
|
||||
ProjectId = CurrUser.LoginProjectId,
|
||||
MaterialCode = txtMaterialCode.Text.Trim(),
|
||||
BarCode = txtBarCode.Text.Trim()
|
||||
};
|
||||
Grid1.DataSource = TwInputdetailBarCodeService.GetListData(query, Grid1);
|
||||
Grid1.RecordCount = TwInputdetailBarCodeService.Count;
|
||||
Grid1.DataBind();
|
||||
}
|
||||
|
||||
protected void btnSearch_Click(object sender, EventArgs e)
|
||||
{
|
||||
Grid1.PageIndex = 0;
|
||||
BindGrid();
|
||||
}
|
||||
|
||||
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
|
||||
{
|
||||
Grid1.PageIndex = e.NewPageIndex;
|
||||
BindGrid();
|
||||
}
|
||||
|
||||
protected void Grid1_RowCommand(object sender, GridCommandEventArgs e)
|
||||
{
|
||||
if (e.CommandName != "btnBarCodePrint")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FastReportService.ResetData();
|
||||
var query = new Model.Tw_InputDetailBarCodeOutput
|
||||
{
|
||||
Id = e.RowID,
|
||||
ProjectId = CurrUser.LoginProjectId
|
||||
};
|
||||
var list = TwInputdetailBarCodeService.GetListData(query);
|
||||
if (list.Count == 0)
|
||||
{
|
||||
ShowNotify("未找到入库条码明细。", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
DataTable table = LINQToDataTable(list);
|
||||
table.TableName = "Table1";
|
||||
FastReportService.AddFastreportTable(table);
|
||||
|
||||
string rootPath = Server.MapPath("~/");
|
||||
string templatePath = "File\\Fastreport\\材料入库条码.frx";
|
||||
if (File.Exists(rootPath + templatePath))
|
||||
{
|
||||
string printUrl = ResolveUrl(FastReportService.ExportReport(rootPath + templatePath));
|
||||
PageContext.RegisterStartupScript(string.Format("printByHiddenFrame('{0}');", printUrl));
|
||||
}
|
||||
}
|
||||
|
||||
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
|
||||
Grid1.PageIndex = 0;
|
||||
BindGrid();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <自动生成>
|
||||
// 此代码由工具生成。
|
||||
// </自动生成>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace FineUIPro.Web.CLGL
|
||||
{
|
||||
public partial class InputBarCodeQuery
|
||||
{
|
||||
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
|
||||
protected global::FineUIPro.PageManager PageManager1;
|
||||
protected global::FineUIPro.Panel Panel1;
|
||||
protected global::FineUIPro.Grid Grid1;
|
||||
protected global::FineUIPro.Toolbar Toolbar1;
|
||||
protected global::FineUIPro.TextBox txtMaterialCode;
|
||||
protected global::FineUIPro.TextBox txtBarCode;
|
||||
protected global::FineUIPro.ToolbarFill ToolbarFill1;
|
||||
protected global::FineUIPro.Button btnSearch;
|
||||
protected global::System.Web.UI.WebControls.Label lblNumber;
|
||||
protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1;
|
||||
protected global::FineUIPro.ToolbarText ToolbarText1;
|
||||
protected global::FineUIPro.DropDownList ddlPageSize;
|
||||
}
|
||||
}
|
||||
@@ -91,7 +91,7 @@
|
||||
<f:RenderField Width="150px" ColumnID="StockNum" DataField="StockNum" SortField="StockNum"
|
||||
FieldType="String" HeaderText="库存数量" TextAlign="Left" HeaderTextAlign="Center">
|
||||
</f:RenderField>
|
||||
<f:LinkButtonField Width="120px" ColumnID="btnBarCodePrint" TextAlign="Center" CommandName="btnBarCodePrint" Text="入库条码打印" Locked="true" />
|
||||
<f:LinkButtonField Width="120px" ColumnID="btnBarCodePrint" TextAlign="Center" CommandName="btnBarCodePrint" Text="入库条码打印" Locked="true" Hidden="true"/>
|
||||
|
||||
</Columns>
|
||||
<%-- <Listeners>
|
||||
|
||||
@@ -355,6 +355,7 @@
|
||||
<Content Include="CLGL\InPlanMaster.aspx" />
|
||||
<Content Include="CLGL\InPlanMasterDataIn.aspx" />
|
||||
<Content Include="CLGL\InPlanMasterEdit.aspx" />
|
||||
<Content Include="CLGL\InputBarCodeQuery.aspx" />
|
||||
<Content Include="CLGL\InputMaster.aspx" />
|
||||
<Content Include="CLGL\InputMasterEdit.aspx" />
|
||||
<Content Include="CLGL\MaterialStock.aspx" />
|
||||
@@ -8304,6 +8305,13 @@
|
||||
<DependentUpon>InputMaster.aspx</DependentUpon>
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Compile>
|
||||
<Compile Include="CLGL\InputBarCodeQuery.aspx.cs">
|
||||
<DependentUpon>InputBarCodeQuery.aspx</DependentUpon>
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Compile>
|
||||
<Compile Include="CLGL\InputBarCodeQuery.aspx.designer.cs">
|
||||
<DependentUpon>InputBarCodeQuery.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="CLGL\InputMaster.aspx.designer.cs">
|
||||
<DependentUpon>InputMaster.aspx</DependentUpon>
|
||||
</Compile>
|
||||
@@ -17369,4 +17377,4 @@
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
</Project>
|
||||
|
||||
@@ -91,6 +91,10 @@
|
||||
</f:Button>
|
||||
<f:Button ID="btnMatImport" Text="材料导入" ToolTip="材料导入" Icon="PackageIn" runat="server" OnClick="btnMatImport_Click">
|
||||
</f:Button>
|
||||
<f:Button ID="btnCalibrateSharedMaterialCode" Text="校准共用材料编码"
|
||||
ToolTip="批量校准选中管线的零数量材料,先查左侧相邻焊口,再查右侧"
|
||||
runat="server" OnClick="btnCalibrateSharedMaterialCode_Click">
|
||||
</f:Button>
|
||||
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="导出" ToolTip="导出" Icon="FolderUp"
|
||||
EnableAjax="false" DisableControlBeforePostBack="false">
|
||||
</f:Button>
|
||||
|
||||
@@ -949,6 +949,34 @@ namespace FineUIPro.Web.HJGL.DataImport
|
||||
this.BindGrid2(this.tvControlItem.SelectedNodeID, this.hdUnitWorkId.Text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 对选中管线的全部零数量材料校准主编码,不受列表筛选和勾选状态影响。
|
||||
/// </summary>
|
||||
protected void btnCalibrateSharedMaterialCode_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.PersonId,
|
||||
Const.HJGL_WeldJointMenuId, Const.BtnModify))
|
||||
{
|
||||
ShowNotify("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
var pipeline = PipelineService.GetPipelineByPipelineId(this.tvControlItem.SelectedNodeID);
|
||||
if (pipeline == null)
|
||||
{
|
||||
ShowNotify("请先选择需要校准的管线!", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
int count = PipelineMatService.CalibrateSharedMaterialCodes(pipeline.PipelineId);
|
||||
|
||||
this.hdUnitWorkId.Text = pipeline.UnitWorkId;
|
||||
this.BindGrid1(pipeline.PipelineId, pipeline.UnitWorkId);
|
||||
this.BindGrid2(pipeline.PipelineId, pipeline.UnitWorkId);
|
||||
this.BindGrid3(pipeline.PipelineId, pipeline.UnitWorkId);
|
||||
ShowNotify(string.Format("校准完成,共处理 {0} 条材料。", count), MessageBoxIcon.Success);
|
||||
}
|
||||
|
||||
#region 管线材料导入
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -185,6 +185,11 @@ namespace FineUIPro.Web.HJGL.DataImport
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnMatImport;
|
||||
|
||||
/// <summary>
|
||||
/// 校准共用材料编码按钮。
|
||||
/// </summary>
|
||||
protected global::FineUIPro.Button btnCalibrateSharedMaterialCode;
|
||||
|
||||
/// <summary>
|
||||
/// btnOut 控件。
|
||||
/// </summary>
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
<TreeNode id="EEC0D060-C15E-4D25-B015-C2B91F735DAC" Text="发货管理" NavigateUrl="HJGL/PreDesign/TrainNumberManager.aspx"></TreeNode>
|
||||
</TreeNode>
|
||||
<TreeNode id="9B828E92-733B-4AF9-9DD0-55ECD8B64AB8" Text="材料管理" NavigateUrl=""><TreeNode id="E29C1839-3530-45EC-A752-B26A0027E2CD" Text="入库管理" NavigateUrl=""><TreeNode id="324C72AF-447A-4308-AFB7-ABF788C58240" Text="入库申请" NavigateUrl="CLGL/InPlanMaster.aspx"></TreeNode>
|
||||
<TreeNode id="74048E7D-C9D3-45A1-B985-DCE1DB5723F5" Text="入库条码查询" NavigateUrl="CLGL/InputBarCodeQuery.aspx"></TreeNode>
|
||||
<TreeNode id="4A55351A-2440-4A2D-8509-3FFEE5FC8861" Text="入库单管理" NavigateUrl="CLGL/InputMaster.aspx"></TreeNode>
|
||||
</TreeNode>
|
||||
<TreeNode id="16A22282-4966-4946-B0F8-855E1300AE2B" Text="出库管理" NavigateUrl=""><TreeNode id="E910F410-07FB-41C3-AA80-8E30D1563BC1" Text="出库申请" NavigateUrl="CLGL/OutPlanMaster.aspx"></TreeNode>
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Model
|
||||
public string Id { get; set; }
|
||||
public string InputDetailId { get; set; }
|
||||
public string InputMasterId { get; set; }
|
||||
public string ProjectId { get; set; }
|
||||
public string CusBillCode { get; set; }
|
||||
public string MaterialCode { get; set; }
|
||||
public string Code { get; set; }
|
||||
|
||||
Reference in New Issue
Block a user