用友ERT T6 技术解析(四)采购入库 上
第二章 功能实现
2.1 界面信息
2.1.1 登录
2.3 采购管理
2.3.1 采购入库
介绍:采购入库这个模块,是采购订单和审核订单与入库订单的集合模块。左边dgv是单据信息,右边dgv是左边dgv选择的单据明细列表,表头显示框为单据主要内容,表尾为单据部分内容。主界面(2.3.1图1)
功能:【导出单据】可以将单据导出到Excel文档。【导出明细】将单据下的明细导出到Excel文档。【筛选】可以对单据进行筛选,如图(2.3.1 图2)。【增加】新增一条采购单据,同时某些按钮不能同时使用,只能进行放弃操作。【修改】对单据进行修改。【删除】对未审核的订单进行对订单进行失效处理。【保存】在新增/修改状态下才能启用的按钮,对订单进行保存。【放弃】在新增/修改状态下才能启用的按钮,对订单进行放弃当前的全部操作。【入库】对已经审核过的采购订单进行入库。【首页】因为当前显示的订单数默认是每页30条,可以自行设置大小,所以已经将单据进行分页处理,首页代表最前面30条数据。【下页】第(页数*页大小~页数*页大小 + 30)之间的30条数据。【上页】第(页数*页大小~页数*页大小 + 30)之间的30条数据。【末页】最后面小于等于30条的数据。【刷新】对当前数据进行刷新。【退出】退出页面,并且把当前界面进行截图进行保存在另一窗体(类似QQ的窗体)可以随时查看已近打开过的窗体。【加载】对当前页面的dgv单据信息进行页条数加载,每页详细多少条可以自行设置。。
主界面:
2.3.1(图1)
单击【筛选】按钮显示单据筛选框,如图,筛选框可随意移动。筛选后的信息也是按照分页来算,每页显示多少条,自行设定。
2.3.1(图2)
从界面上可以看到00我们这里用到的控件有
控件名称 |
说明 |
日期控件(DateTimePicker) |
控件可以在工具箱直接拖动至窗体,拖至窗体后右击属性可以修改控件的样式和各种属性,还可以编辑事件。 |
下拉框(ComboBox) |
|
文本(TextBox) |
|
按钮(Button) |
|
容器(Panel) |
|
工具栏(ToolStrip) |
查询功能实现:
第一步:数据库
1、表与关系
2.3.1(图3)
表1: 采购入库表(PurchaseReceiptTable)
列名 |
数据类型 |
主键/外键 |
说明 |
PurchaseReceiptID |
int - Identity |
主键 |
采购入库单ID |
DocumentsID_PurchaseOrder |
int |
外键 |
单据ID_采购单 |
DocumentsID_GRN |
int |
外键 |
单据ID_入库单 |
InAndOutOfInventoryRecordID |
int |
外键 |
出入库存记录ID |
DocumentsID_ToInvoice |
int |
外键 |
单据ID_到货单 |
BusinessNo |
nchar (10) |
业务号 |
|
CustomerID |
int |
外键 |
客户ID |
AuditDate |
datetime |
审核日期 |
|
Note |
nchar (100) |
备注 |
|
ReviewWhether |
bit |
审核否 |
|
TheOperatorID_MakingPeople |
int |
外键 |
操作员ID_制单人 |
TheOperatorID_Reviewer |
int |
外键 |
操作员ID_审核人 |
TheOperatorID_personOfChargeToAnAccount |
int |
外键 |
操作员ID_记账人 |
TheOperatorID_Salesman |
int |
外键 |
操作员ID_业务员 |
BusinessTypeID |
int |
外键 |
业务类型ID |
表2: 采购入库明细表(PurchasingScheduleOfPutInStorage)
列名 |
数据类型 |
主键/外键 |
说明 |
ProcurementWarehousingDetailID |
int - Identity |
主键 |
采购入库明细ID |
TheInventoryID |
int |
外键 |
存货ID |
Quantity |
nchar (10) |
数量 |
|
PurchaseReceiptID |
int |
外键 |
采购入库单ID |
表3: 单据集合表(TheDocumentsTable)
列名 |
数据类型 |
主键/外键 |
说明 |
DocumentID |
int - Identity |
主键 |
单据ID |
NameOfDocuments |
nchar (10) |
单据名称 |
|
DocumentNumber |
nchar (20) |
单据编号 |
|
DateOfDocuments |
datetime |
单据日期 |
|
TypeOfDocumen |
nchar (10) |
单据类型 |
|
InThisPaper |
nchar (100) |
摘要 |
表4: 出入库记录表(InAndOutOfInventoryRecord)
列名 |
数据类型 |
主键/外键 |
说明 |
InAndOutOfInventoryRecordID |
int - Identity |
主键 |
出入库存记录ID |
WarehouseID_Dispatch |
int |
外键 |
仓库ID_出库 |
ForTheTypeID |
int |
外键 |
出入库类型ID |
WarehouseInventory_ID |
int |
外键 |
仓库ID_入库 |
OoperateDate |
datetime |
操作日期 |
表5: 出入库记录表(InAndOutOfInventoryRecordList)
列名 |
数据类型 |
主键/外键 |
说明 |
InAndOutOfInventoryRecordListID |
int - Identity |
主键 |
出入库记录明细ID |
Quantity |
decimal (18, 3) |
数量 |
|
TheUnitPrice |
decimal (18, 3) |
单价 |
|
InAndOutOfInventoryRecordID |
int |
外键 |
存货ID |
TheInventoryID |
int |
外键 |
出入库存记录ID |
2、绑定下拉框
第一步:数据库的存储过程
if(@Type='frm_PurchaseOddNumbers_Load_SelectClientele') --查询供应商BEGINSELECT LTRIM(RTRIM(CustomerID)) AS 供应商ID,LTRIM(RTRIM(TheCustomerName)) AS 供应商名称FROM TheCustomerTableEND
第二步 :逻辑层(BLL)代码
///<summary>///供应商查询///</summary>///<returns></returns>[OperationContract]public DataSetfrm_PurchaseOddNumbers_Load_SelectClientele(){SqlParameter[]SQlCMDpas = {new SqlParameter("@Type",SqlDbType.Char), //存储过程的定义方法的 参数 与参数类型};SQlCMDpas[0].Value = "frm_PurchaseOddNumbers_Load_SelectClientele"; //为该参数赋值 对应存储过程的某对应方法DataTabledt = myDALMethod.QueryDataTable("PurchaseManage_frm_PurchaseOddNumbers",SQlCMDpas); //对应存储过程名称获取查询数据表DataSetds = new DataSet(); //实例化数据集ds.Tables.Add(dt); //添加数据表到数据集return ds; //返回数据集}
第三步:界面层(UIL)代码,在窗体的Load事件中绑定下拉框的数据
截图效果:
BLL用友T6.采购管理.frm_PurchaseOddNumbers.frm_PurchaseOddNumbersClientmyfrm_PurchaseOddNumbers =newBLL用友T6.采购管理.frm_PurchaseOddNumbers.frm_PurchaseOddNumbersClient(); //实例化采购入库BLL 逻辑层BLL用友T6.采购管理.frm_ProductBeLaidUp.frm_ProductBeLaidUpClient myfrm_ProductBeLaidUp =newBLL用友T6.采购管理.frm_ProductBeLaidUp.frm_ProductBeLaidUpClient(); //实例化产成品入库 BLL 逻辑层 ///<summary>
///绑定供应商下拉框
///</summary>private void BindingSupplier(){cboSupplyOfMaterialUnit.DataSource =myfrm_PurchaseOddNumbers.frm_PurchaseOddNumbers_Load_SelectClientele().Tables[0];//获取数据源并绑定到下拉框cboSupplyOfMaterialUnit.DisplayMember = "供应商名称"; //绑定下拉框的显示成员cboSupplyOfMaterialUnit.ValueMember = "供应商ID"; //绑定下拉框的值成员}
3、绑定表格数据和分页功能和表头显示框(DataGridView单据数据)
第一步:数据库的存储过程
@LoadCount INT = 0 , --要加载的条数@BeginCount INT = 0 --不要前面多少条数据if(@Type='frm_PurchaseOddNumbers_Load_SelectPurchaseOrderForm')--查询采购单BEGINSELECT TOP(@LoadCount) LTRIM(RTRIM(TheDocumentsTable.DocumentNumber)) AS 采购单号,(CASEWHEN PurchaseReceiptTable.DocumentsID_GRN = 0 AND PurchaseReceiptTable.ReviewWhether = 1 THEN '未入库'WHEN PurchaseReceiptTable.DocumentsID_GRN = 0 AND PurchaseReceiptTable.ReviewWhether = 0 THEN '待审核'WHEN PurchaseReceiptTable.DocumentsID_GRN != 0 THEN TheDocumentsTable_1.DocumentNumber END) AS 入库单号,LTRIM(RTRIM(PurchaseReceiptTable.PurchaseReceiptID)) AS 采购入库单ID, LTRIM(RTRIM(PurchaseReceiptTable.DocumentsID_PurchaseOrder)) AS 单据ID_采购单,LTRIM(RTRIM(PurchaseReceiptTable.DocumentsID_GRN)) AS 单据ID_入库单,LTRIM(RTRIM(PurchaseReceiptTable.InAndOutOfInventoryRecordID))AS 出入库存记录ID,LTRIM(RTRIM(PurchaseReceiptTable.DocumentsInvoice)) AS 提单号,LTRIM(RTRIM(PurchaseReceiptTable.BusinessNo)) AS 业务号, LTRIM(RTRIM(PurchaseReceiptTable.CustomerID))AS 客户ID, LTRIM(RTRIM(PurchaseReceiptTable.AuditDate)) AS 审核日期,LTRIM(RTRIM(PurchaseReceiptTable.Note)) AS 备注,(CASEWHEN PurchaseReceiptTable.ReviewWhether = 0 THEN '未审核'WHEN PurchaseReceiptTable.ReviewWhether = 1 THEN '已审核'END) AS 审核否,LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_MakingPeople)) AS 操作员ID_制单人,LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_Reviewer))AS 操作员ID_审核人,LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_personOfChargeToAnAccount)) AS 操作员ID_记账人,LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_Salesman))AS 操作员ID_业务员,(CAST(TheDocumentsTable_1.DateOfDocuments ASDATETIME)) AS 入库日期,(CAST(TheDocumentsTable.DateOfDocumentsAS DATETIME)) AS 采购日期,LTRIM(RTRIM(InAndOutOfInventoryRecord.WarehouseInventory_ID)) AS 入库仓库ID, LTRIM(RTRIM(ForTheTypeOfTable.ForTheTypeName)) AS 入库类型,LTRIM(RTRIM(WarehouseTable.TheNameOfTheWarehouse)) AS 入库仓库,LTRIM(RTRIM(TheCustomerTable.TheCustomerName)) AS 供货单位,LTRIM(RTRIM(TheOperatorTable_2.TheOperatorTypeName)) AS 业务员名称,LTRIM(RTRIM(DepartmentTable.DepartmentName)) AS 部门名称,LTRIM(RTRIM(TheOperatorTable_1.TheOperatorTypeName)) AS 制单员,LTRIM(RTRIM(TheOperatorTable_3.TheOperatorTypeName))AS 审核员,LTRIM(RTRIM(TheOperatorTable.TheOperatorTypeName)) AS 记账员,LTRIM(RTRIM(BusinessTypeTable.BusinessTypeNname)) AS 业务类型, LTRIM(RTRIM(PurchaseReceiptTable.BusinessTypeID))AS 业务类型ID, LTRIM(RTRIM(TheCustomerTable.CustomerID)) AS 供应商ID, LTRIM(RTRIM(InAndOutOfInventoryRecord.ForTheTypeID)) AS 出入库类型IDFROM PurchaseReceiptTableLEFT JOINBusinessTypeTable ON PurchaseReceiptTable.BusinessTypeID = BusinessTypeTable.BusinessTypeID LEFT OUTER JOINTheDocumentsTable ON PurchaseReceiptTable.DocumentsID_PurchaseOrder= TheDocumentsTable.DocumentID LEFT OUTER JOINTheDocumentsTable AS TheDocumentsTable_1ON PurchaseReceiptTable.DocumentsID_GRN = TheDocumentsTable_1.DocumentID LEFT OUTER JOINInAndOutOfInventoryRecord ON PurchaseReceiptTable.InAndOutOfInventoryRecordID= InAndOutOfInventoryRecord.InAndOutOfInventoryRecordIDLEFT OUTER JOINForTheTypeOfTable ON InAndOutOfInventoryRecord.ForTheTypeID = ForTheTypeOfTable.ForTheTypeID LEFT OUTER JOINWarehouseTable ON InAndOutOfInventoryRecord.WarehouseInventory_ID= WarehouseTable.WarehouseID LEFT OUTER JOINTheCustomerTable ON PurchaseReceiptTable.CustomerID = TheCustomerTable.CustomerID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_2ON PurchaseReceiptTable.TheOperatorID_Salesman= TheOperatorTable_2.TheOperatorID LEFT OUTER JOINDepartmentTable ON TheOperatorTable_2.DepartmentID = DepartmentTable.DepartmentID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_1ON PurchaseReceiptTable.TheOperatorID_MakingPeople= TheOperatorTable_1.TheOperatorID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_3ON PurchaseReceiptTable.TheOperatorID_Reviewer= TheOperatorTable_3.TheOperatorID LEFT OUTER JOINTheOperatorTable ON PurchaseReceiptTable.TheOperatorID_personOfChargeToAnAccount= TheOperatorTable.TheOperatorIDWHERE 1 = 1 AND PurchaseReceiptTable.EffectiveNo = 1 AND PurchaseReceiptTable.PurchaseReceiptID not in(SELECTTOP(@BeginCount) PurchaseReceiptTable.PurchaseReceiptID FROMPurchaseReceiptTable INNER JOINTheDocumentsTable ON PurchaseReceiptTable.DocumentsID_PurchaseOrder= TheDocumentsTable.DocumentID WHERE PurchaseReceiptTable.EffectiveNo = 1 ORDER BY TheDocumentsTable.DateOfDocuments DESC)ORDER BY TheDocumentsTable.DateOfDocuments DESC; --根据最新时间排序WITH DATA as (SELECT PurchaseReceiptTable.PurchaseReceiptIDFROM PurchaseReceiptTableLEFT JOINBusinessTypeTable ON PurchaseReceiptTable.BusinessTypeID = BusinessTypeTable.BusinessTypeID LEFT OUTER JOINTheDocumentsTable ON PurchaseReceiptTable.DocumentsID_PurchaseOrder= TheDocumentsTable.DocumentID LEFT OUTER JOINTheDocumentsTable AS TheDocumentsTable_1ON PurchaseReceiptTable.DocumentsID_GRN = TheDocumentsTable_1.DocumentID LEFT OUTER JOINInAndOutOfInventoryRecord ON PurchaseReceiptTable.InAndOutOfInventoryRecordID= InAndOutOfInventoryRecord.InAndOutOfInventoryRecordIDLEFT OUTER JOINForTheTypeOfTable ON InAndOutOfInventoryRecord.ForTheTypeID = ForTheTypeOfTable.ForTheTypeID LEFT OUTER JOINWarehouseTable ON InAndOutOfInventoryRecord.WarehouseInventory_ID= WarehouseTable.WarehouseID LEFT OUTER JOINTheCustomerTable ON PurchaseReceiptTable.CustomerID = TheCustomerTable.CustomerID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_2ON PurchaseReceiptTable.TheOperatorID_Salesman= TheOperatorTable_2.TheOperatorID LEFT OUTER JOINDepartmentTable ON TheOperatorTable_2.DepartmentID = DepartmentTable.DepartmentID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_1ON PurchaseReceiptTable.TheOperatorID_MakingPeople= TheOperatorTable_1.TheOperatorID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_3ON PurchaseReceiptTable.TheOperatorID_Reviewer= TheOperatorTable_3.TheOperatorID LEFT OUTER JOINTheOperatorTable ON PurchaseReceiptTable.TheOperatorID_personOfChargeToAnAccount= TheOperatorTable.TheOperatorIDWHERE PurchaseReceiptTable.EffectiveNo = 1)selectCOUNT(*) AS 行数FROM DATAEND
第二步:逻辑层(BLL)代码
///<summary>///采购入库单查询///</summary>[OperationContract]public DataSetfrm_PurchaseOddNumbers_Load_SelectPurchaseOrderForm(intintLoadCount, int intBeginCount){SqlParameter[]SQlCMDpas = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@LoadCount", SqlDbType.Int),//要加载的条数new SqlParameter("@BeginCount", SqlDbType.Int),//不要前面多少条数据};SQlCMDpas[0].Value = "frm_PurchaseOddNumbers_Load_SelectPurchaseOrderForm";SQlCMDpas[1].Value = intLoadCount;SQlCMDpas[2].Value = intBeginCount;returnmyDALMethod.QueryDataSet("PurchaseManage_frm_PurchaseOddNumbers",SQlCMDpas);}
第三步:界面层(UIL)代码,在窗体的Load事件中绑定下拉框的数据
(1) 绑定DaTaGridView单据表格
截图效果(绑定表格):
intintPerPageLoad = 30; //显示每页加载的数据条数 默认30int intTpage= 0; //页数intintSumItem = 0; //总条数int intSumItemTpage= 0; //总页数
#region 获取单据和单据数DataSetdsAll =myfrm_PurchaseOddNumbers.frm_PurchaseOddNumbers_Load_SelectPurchaseOrderForm(intPerPageLoad,0);//获取默认30条数据dtPurchaseBePutInStorage =dsAll.Tables[0].Copy(); //查询采购入库单dgvPurchaseBe.DataSource =dtPurchaseBePutInStorage; //绑定单据数据源PublicStaticMothd.PreventSort(dgvPurchaseBe); //不允许点击标题排序intSumItem = Convert.ToInt32(dsAll.Tables[1].Rows[0][0]); //获取条数dsAll.Clear(); //用完就释放#endregion#region 计算页数if(intSumItem % intPerPageLoad > 0) //计算页总数{intSumItemTpage = (intSumItem /intPerPageLoad) + 1; //有余数 要加1}else{intSumItemTpage = (intSumItem /intPerPageLoad);}lblTpage.Text = string.Format("页数: {0} / {1}", (intTpage + 1), intSumItemTpage); //显示页数#endregionChangeColour(); //单据审核,行颜色改变dgvPurchaseBe.Columns["采购入库单ID"].Visible = false;dgvPurchaseBe.Columns["单据ID_采购单"].Visible = false;dgvPurchaseBe.Columns["单据ID_入库单"].Visible = false;dgvPurchaseBe.Columns["出入库存记录ID"].Visible = false;dgvPurchaseBe.Columns["客户ID"].Visible = false;dgvPurchaseBe.Columns["操作员ID_制单人"].Visible = false;dgvPurchaseBe.Columns["操作员ID_审核人"].Visible = false;dgvPurchaseBe.Columns["操作员ID_记账人"].Visible = false;dgvPurchaseBe.Columns["操作员ID_业务员"].Visible = false;dgvPurchaseBe.Columns["入库仓库ID"].Visible = false;dgvPurchaseBe.Columns["业务类型ID"].Visible = false;dgvPurchaseBe.Columns["供应商ID"].Visible = false;dgvPurchaseBe.Columns["出入库类型ID"].Visible = false;//隐藏ID列
(2) 绑定显示框
截图效果(表头显示):
在单据表格的 行改变事件(dgvPurchaseBe_SelectionChanged)
///<summary>///绑定采购单///</summary>///<paramname="Count">单据DataGridView索引</param>privatevoid BindingReceipts(intCount){try //对有空的下拉框进行捕捉{intOrderNumber = Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["采购入库单ID"].ToString()); //获取 订单号intAndOutOfInventoryRecordID = Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["出入库存记录ID"].ToString());//获取 出入库记录单txtBeLaidUpTime.Text =dtPurchaseBePutInStorage.Rows[Count]["入库日期"].ToString(); //获取 入库日期txtBeLaidUpOddNnumbers.Text =dtPurchaseBePutInStorage.Rows[Count]["入库单号"].ToString(); //获取 入库单号cboStorage.SelectedValue = Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["入库仓库ID"].ToString());//获取 仓库名称txtIndentNumber.Text =dtPurchaseBePutInStorage.Rows[Count]["采购单号"].ToString(); //获取 订单号txtArrivalOfGoodsTime.Text =dtPurchaseBePutInStorage.Rows[Count]["采购日期"].ToString(); //获取采购日期txtArrivalOfGoodsNumber.Text =dtPurchaseBePutInStorage.Rows[Count]["提单号"].ToString(); //获取 提单号txtBusinessNumber.Text =dtPurchaseBePutInStorage.Rows[Count]["业务号"].ToString(); //获取 业务号cboSupplyOfMaterialUnit.SelectedValue = Convert.ToInt32(dtPurchaseBePutInStorage.Rows[0]["供应商ID"].ToString());//获取 供货单位cboBusinessNumber.SelectedValue= Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["操作员ID_业务员"].ToString());//获取 业务员cboBusinessType.SelectedValue =Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["业务类型ID"].ToString());//获取 业务类型cboBeLaidUpSort.SelectedValue =Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["出入库类型ID"].ToString());//获取 入库类别txtExamineAndVerifyTime.Text =dtPurchaseBePutInStorage.Rows[Count]["审核日期"].ToString(); //获取 审核日期txtRemark.Text =dtPurchaseBePutInStorage.Rows[Count]["备注"].ToString(); //获取 备注cboReceiptsProducer.SelectedValue = Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["操作员ID_制单人"].ToString()); //获取 制单人cboTallyPerson.SelectedValue = Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["操作员ID_记账人"].ToString()); //获取 记账人cboExamineAndVerifyPerson.SelectedValue = Convert.ToInt32(dtPurchaseBePutInStorage.Rows[Count]["操作员ID_审核人"].ToString());//获取 审核人}catch{ }}
(3) 分页显示
截图效果(分页功能):
加载按钮 Click(单击) 事件
#region 每页加载数据多少条private void btnAllLoad_Click(object sender, EventArgs e){int intPage = 0; //加载的条数if (txtNumber.Text.Length == 0){intPage = 30;}else{intPage = Convert.ToInt32(txtNumber.Text.Trim());}if (intPage >= 10){intPerPageLoad = intPage;intTpage = 0;DataSet dsAll = myfrm_PurchaseOddNumbers.frm_PurchaseOddNumbers_Load_SelectPurchaseOrderForm(intPerPageLoad, intTpage * intPerPageLoad);dtPurchaseBePutInStorage = dsAll.Tables[0].Copy(); //查询采购入库单intSumItem = Convert.ToInt32(dsAll.Tables[1].Rows[0][0]); //获取条数dgvPurchaseBe.DataSource = dtPurchaseBePutInStorage;dsAll.Clear();//用完释放}else{MessageBox.Show("最低显示10条!");}}#endregion
(4) 单据审核改变行颜色
截图效果(审核行改变颜色):
在绑定表格数据源的时候加上一下代码的 方法 <span style="font-family: Arial, Helvetica, sans-serif;">ChangeColour()</span>
#region 单据审核改变颜色///<summary>///审核改变颜色///</summary>privatevoid ChangeColour(){for(int intRows = 0; intRows <dgvPurchaseBe.Rows.Count; intRows++) //循环单据表格的行{if(dgvPurchaseBe.Rows[intRows].Cells["审核否"].Value.ToString().Trim() == "已审核") //每一行得判断是否已审核{dgvPurchaseBe.Rows[intRows].DefaultCellStyle.BackColor = Color.Bisque; //如果审核当前行变成 Color.Bisque}}}#endregion
4、筛选后绑定表格数据
第一步:数据库的存储过程
@采购单号 NCHAR(100) ='' ,@入库单号 NCHAR(100) ='',@采购日期_BEGIN DATE = '' ,@采购日期_END DATE = '' ,@入库日期_BEGIN DATE = '',@入库日期_END DATE = '',@审核 INT = 0
if(@Type='frm_PurchaseOddNumbers_Load_SelectAllPurchaseOrderForm')--筛选全部采购单BEGINdeclare@str1 nchar(1000)='';declare @str2 nchar(1000)='';declare @str3 nchar(1000)='';declare @str4 nchar(1000)='';declare @str5 nchar(1000)='';declare @CaiGouDanHao nchar(30)=''; --采购单号declare @RuKuDanHao nchar(30)=''; --入库单号declare @CaiGouRiQi_BEGIN nchar(30)='';--采购日期开始declare @CaiGouRiQi_END nchar(30)='';--采购日期结束declare @RuKuRiQi_BEGIN nchar(30)=''; --入库日期开始declare @RuKuRiQi_END nchar(30)=''; --入库日期结束declare @ShengHe nchar(2)=''; --审核set @CaiGouDanHao=ltrim(rtrim(@采购单号));set @CaiGouRiQi_BEGIN= @采购日期_BEGIN;set @CaiGouRiQi_END= @采购日期_END;set @RuKuRiQi_BEGIN= @入库日期_BEGIN;set @RuKuRiQi_END= @入库日期_END;set @RuKuDanHao= ltrim(rtrim(@入库单号));set @ShengHe= @审核IF ltrim(rtrim(@CaiGouDanHao))!='' --采购单号BEGINSET @str1='and ltrim(rtrim(TheDocumentsTable.DocumentNumber))LIKE ''%'+ltrim(rtrim(@CaiGouDanHao))+'%'''ENDIF ltrim(rtrim(@RuKuDanHao))!='' --入库单号BEGINSET @str2='andltrim(rtrim(TheDocumentsTable_1.DocumentNumber)) LIKE ''%'+ltrim(rtrim(@RuKuDanHao))+'%'''ENDIF @CaiGouRiQi_BEGIN!= '1991-09-13' and @CaiGouRiQi_END !='1991-09-13' --采购日期BEGINSET @str3=' andTheDocumentsTable.DateOfDocuments between '''+@CaiGouRiQi_BEGIN+''' and '''+@CaiGouRiQi_END+''''ENDIF @RuKuRiQi_BEGIN!= '1991-09-13' and @RuKuRiQi_END != '1991-09-13' --入库日期BEGINSET @str4=' andTheDocumentsTable_1.DateOfDocuments between '''+@RuKuRiQi_BEGIN+''' and '''+@RuKuRiQi_END+''''ENDIF ltrim(rtrim(@ShengHe)) != 2 --审核BEGINSET @str5=' and PurchaseReceiptTable.ReviewWhether= ' + @ShengHeENDexec ('SELECT TOP('+ @LoadCount +') LTRIM(RTRIM(TheDocumentsTable.DocumentNumber)) AS 采购单号,(CASE WHENPurchaseReceiptTable.DocumentsID_GRN = 0 AND PurchaseReceiptTable.ReviewWhether= 1 THEN ''未入库'' WHENPurchaseReceiptTable.DocumentsID_GRN = 0 AND PurchaseReceiptTable.ReviewWhether= 0 THEN ''待审核'' WHENPurchaseReceiptTable.DocumentsID_GRN != 0 THENTheDocumentsTable_1.DocumentNumber END) AS 入库单号,LTRIM(RTRIM(PurchaseReceiptTable.PurchaseReceiptID))AS 采购入库单ID,LTRIM(RTRIM(PurchaseReceiptTable.DocumentsID_PurchaseOrder)) AS 单据ID_采购单,LTRIM(RTRIM(PurchaseReceiptTable.DocumentsID_GRN))AS 单据ID_入库单,LTRIM(RTRIM(PurchaseReceiptTable.InAndOutOfInventoryRecordID)) AS 出入库存记录ID,LTRIM(RTRIM(PurchaseReceiptTable.DocumentsInvoice))AS 提单号,LTRIM(RTRIM(PurchaseReceiptTable.BusinessNo)) AS 业务号,LTRIM(RTRIM(PurchaseReceiptTable.CustomerID))AS 客户ID,LTRIM(RTRIM(PurchaseReceiptTable.AuditDate)) AS 审核日期,LTRIM(RTRIM(PurchaseReceiptTable.Note)) AS 备注,(CASE WHENPurchaseReceiptTable.ReviewWhether = 0 THEN ''未审核'' WHENPurchaseReceiptTable.ReviewWhether = 1 THEN ''已审核''END) AS 审核否, LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_MakingPeople))AS 操作员ID_制单人,LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_Reviewer)) AS 操作员ID_审核人, LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_personOfChargeToAnAccount))AS 操作员ID_记账人,LTRIM(RTRIM(PurchaseReceiptTable.TheOperatorID_Salesman)) AS 操作员ID_业务员,(CAST (TheDocumentsTable_1.DateOfDocumentsAS DATETIME)) AS 入库日期, (CAST(TheDocumentsTable.DateOfDocuments AS DATETIME)) AS 采购日期, LTRIM(RTRIM(InAndOutOfInventoryRecord.WarehouseInventory_ID))AS 入库仓库ID,LTRIM(RTRIM(ForTheTypeOfTable.ForTheTypeName)) AS 入库类型,LTRIM(RTRIM(WarehouseTable.TheNameOfTheWarehouse))AS 入库仓库,LTRIM(RTRIM(TheCustomerTable.TheCustomerName)) AS 供货单位,LTRIM(RTRIM(TheOperatorTable_2.TheOperatorTypeName))AS 业务员名称,LTRIM(RTRIM(DepartmentTable.DepartmentName)) AS 部门名称,LTRIM(RTRIM(TheOperatorTable_1.TheOperatorTypeName))AS 制单员, LTRIM(RTRIM(TheOperatorTable_3.TheOperatorTypeName))AS 审核员,LTRIM(RTRIM(TheOperatorTable.TheOperatorTypeName))AS 记账员,LTRIM(RTRIM(BusinessTypeTable.BusinessTypeNname)) AS 业务类型,LTRIM(RTRIM(PurchaseReceiptTable.BusinessTypeID))AS 业务类型ID,LTRIM(RTRIM(TheCustomerTable.CustomerID)) AS 供应商ID,LTRIM(RTRIM(InAndOutOfInventoryRecord.ForTheTypeID)) AS 出入库类型IDFROM PurchaseReceiptTable LEFT JOINBusinessTypeTable ONPurchaseReceiptTable.BusinessTypeID = BusinessTypeTable.BusinessTypeID LEFTOUTER JOINTheDocumentsTable ONPurchaseReceiptTable.DocumentsID_PurchaseOrder = TheDocumentsTable.DocumentIDLEFT OUTER JOINTheDocumentsTable AS TheDocumentsTable_1ON PurchaseReceiptTable.DocumentsID_GRN = TheDocumentsTable_1.DocumentID LEFTOUTER JOINInAndOutOfInventoryRecord ONPurchaseReceiptTable.InAndOutOfInventoryRecordID =InAndOutOfInventoryRecord.InAndOutOfInventoryRecordID LEFT OUTER JOINForTheTypeOfTable ONInAndOutOfInventoryRecord.ForTheTypeID = ForTheTypeOfTable.ForTheTypeID LEFTOUTER JOINWarehouseTable ONInAndOutOfInventoryRecord.WarehouseInventory_ID =WarehouseTable.WarehouseID LEFT OUTERJOINTheCustomerTable ONPurchaseReceiptTable.CustomerID = TheCustomerTable.CustomerID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_2 ON PurchaseReceiptTable.TheOperatorID_Salesman= TheOperatorTable_2.TheOperatorID LEFT OUTER JOINDepartmentTable ONTheOperatorTable_2.DepartmentID = DepartmentTable.DepartmentID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_1 ONPurchaseReceiptTable.TheOperatorID_MakingPeople =TheOperatorTable_1.TheOperatorID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_3 ONPurchaseReceiptTable.TheOperatorID_Reviewer = TheOperatorTable_3.TheOperatorIDLEFT OUTER JOINTheOperatorTable ON PurchaseReceiptTable.TheOperatorID_personOfChargeToAnAccount= TheOperatorTable.TheOperatorIDWHERE 1 = 1 ANDPurchaseReceiptTable.EffectiveNo = 1 ANDPurchaseReceiptTable.PurchaseReceiptID not in(SELECT TOP('+ @BeginCount +')PurchaseReceiptTable.PurchaseReceiptID FROM PurchaseReceiptTable INNER JOINTheDocumentsTable ONPurchaseReceiptTable.DocumentsID_PurchaseOrder =TheDocumentsTable.DocumentID WHERE 1 = 1'+@str1+@str2+@str3+@str4+@str5+' ORDER BYTheDocumentsTable.DateOfDocuments DESC)'+@str1+@str2+@str3+@str4+@str5+'ORDER BYTheDocumentsTable.DateOfDocuments DESC') --根据最新时间排序exec ('SELECTCOUNT(PurchaseReceiptTable.PurchaseReceiptID) AS 行数FROM PurchaseReceiptTable LEFT JOINBusinessTypeTable ON PurchaseReceiptTable.BusinessTypeID= BusinessTypeTable.BusinessTypeID LEFT OUTER JOINTheDocumentsTable ONPurchaseReceiptTable.DocumentsID_PurchaseOrder = TheDocumentsTable.DocumentIDLEFT OUTER JOINTheDocumentsTable AS TheDocumentsTable_1ON PurchaseReceiptTable.DocumentsID_GRN = TheDocumentsTable_1.DocumentID LEFTOUTER JOINInAndOutOfInventoryRecord ONPurchaseReceiptTable.InAndOutOfInventoryRecordID =InAndOutOfInventoryRecord.InAndOutOfInventoryRecordID LEFT OUTER JOINForTheTypeOfTable ON InAndOutOfInventoryRecord.ForTheTypeID= ForTheTypeOfTable.ForTheTypeID LEFT OUTER JOINWarehouseTable ONInAndOutOfInventoryRecord.WarehouseInventory_ID =WarehouseTable.WarehouseID LEFT OUTERJOINTheCustomerTable ONPurchaseReceiptTable.CustomerID = TheCustomerTable.CustomerID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_2 ONPurchaseReceiptTable.TheOperatorID_Salesman = TheOperatorTable_2.TheOperatorIDLEFT OUTER JOINDepartmentTable ONTheOperatorTable_2.DepartmentID = DepartmentTable.DepartmentID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_1 ONPurchaseReceiptTable.TheOperatorID_MakingPeople =TheOperatorTable_1.TheOperatorID LEFT OUTER JOINTheOperatorTable AS TheOperatorTable_3 ONPurchaseReceiptTable.TheOperatorID_Reviewer = TheOperatorTable_3.TheOperatorIDLEFT OUTER JOINTheOperatorTable ONPurchaseReceiptTable.TheOperatorID_personOfChargeToAnAccount =TheOperatorTable.TheOperatorIDWHERE PurchaseReceiptTable.EffectiveNo = 1 '+@str1+@str2+@str3+@str4+@str5)END
第二步:逻辑层(BLL)代码
///<summary>///筛选数据///</summary>///<paramname="intLoadCount"></param>///<paramname="intBeginCount"></param>///<param name="str采购单号"></param>///<param name="str入库单号"></param>///<param name="dtp采购日期_BEGIN"></param>///<param name="dtp采购日期_END"></param>///<param name="dtp入库日期_BEGIN"></param>///<param name="dtp入库日期_END"></param>///<paramname="intShengHe"></param>///<returns></returns>[OperationContract]public DataSetfrm_PurchaseOddNumbers_Load_SelectAllPurchaseOrderForm(intintLoadCount, int intBeginCount, string str采购单号, string str入库单号,DateTimedtp采购日期_BEGIN, DateTimedtp采购日期_END, DateTimedtp入库日期_BEGIN, DateTimedtp入库日期_END, intintShengHe){SqlParameter[]SQlCMDpas = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@LoadCount", SqlDbType.Int),new SqlParameter("@BeginCount", SqlDbType.Int),new SqlParameter("@采购单号", SqlDbType.NChar),new SqlParameter("@入库单号", SqlDbType.NChar),new SqlParameter("@采购日期_BEGIN", SqlDbType.DateTime),new SqlParameter("@采购日期_END", SqlDbType.DateTime),new SqlParameter("@入库日期_BEGIN", SqlDbType.DateTime),new SqlParameter("@入库日期_END", SqlDbType.DateTime),new SqlParameter("@审核", SqlDbType.Int),};SQlCMDpas[0].Value = "frm_PurchaseOddNumbers_Load_SelectAllPurchaseOrderForm";SQlCMDpas[1].Value = intLoadCount;SQlCMDpas[2].Value = intBeginCount;SQlCMDpas[3].Value = str采购单号;SQlCMDpas[4].Value = str入库单号;SQlCMDpas[5].Value = dtp采购日期_BEGIN;SQlCMDpas[6].Value = dtp采购日期_END;SQlCMDpas[7].Value = dtp入库日期_BEGIN;SQlCMDpas[8].Value = dtp入库日期_END;SQlCMDpas[9].Value = intShengHe;returnmyDALMethod.QueryDataSet("PurchaseManage_frm_PurchaseOddNumbers",SQlCMDpas);}
第三步:界面层(UIL)代码,在窗体的Load事件中绑定下拉框的数据
截图效果(点击筛选按钮显示筛选单据框):
#region 筛选privatevoid btnScreen_Click(objectsender, EventArgs e){#region 采购日期if(chkPurchaseDate.Checked == true){dtpReceiptsBeginDate = Convert.ToDateTime(dtpPurchaseDateBegin.Value.ToString());dtpReceiptsEndDate = Convert.ToDateTime(dtpPurchaseDateEnd.Value.ToString());}#endregion#region 采购单号if(chkPurchaseNumber.Checked == true){strReceiptsNumber =txtPurchaseNumber.Text.Trim();}#endregion#region 入库单号if(chkBeLaidUpMark.Checked == true){strBeLaidNumber = txtBeLaidUpMark.Text.Trim();}#endregion#region 入库日期if(chkBeLaidUpMark.Checked == true){dtpBeLaidUpBeginDate = Convert.ToDateTime(dtpBeLaidUpDateBegin.Value.ToString());dtpBeLaidUpEndDate = Convert.ToDateTime(dtpBeLaidUpDateEnd.Value.ToString());}#endregion#region 审核if(radAlready.Checked) //已审核{intAlready = 1;}else{if(radNot.Checked) //未审核{intAlready = 0;}else{if(radAll.Checked) //全部{intAlready = 2;}}}#endregionDataSetds =myfrm_PurchaseOddNumbers.frm_PurchaseOddNumbers_Load_SelectAllPurchaseOrderForm(intPerPageLoad,intTpage * intPerPageLoad, strReceiptsNumber, strBeLaidNumber,dtpReceiptsBeginDate,dtpReceiptsEndDate, dtpBeLaidUpBeginDate, dtpBeLaidUpEndDate, intAlready);//查询筛选dtScreen = ds.Tables[0];intSumItem = Convert.ToInt32(ds.Tables[1].Rows[0][0]); //刷新筛选的条数dtPurchaseBePutInStorage =dtScreen; //将筛选后的数据赋值给全局dtPurchaseBePutInStoragedgvPurchaseBe.DataSource =dtPurchaseBePutInStorage;//绑定数据到表格bolWhetherScreen = true; //标识为筛选的数据intTpage = 0; //页数为0ButtonStartUsing(0); //按钮限制}#endregion
5、删除订单(修改有效否 == False)
第一步:数据库的存储过程
if(@Type='tlsbDelete_Click_DaletePurchaseOrderForm') --删除采购入库单BEGINUPDATE PurchaseReceiptTableSET PurchaseReceiptTable.EffectiveNo = 0 --修改有效否WHERE PurchaseReceiptTable.PurchaseReceiptID = @PurchaseReceiptID --采购入库单IDEND
第二步:逻辑层(BLL)代码
///<summary>///删除采购入库单///</summary>///<paramname="intPurchaseReceiptID">采购入库单ID</param>///<returns></returns>[OperationContract]public int tlsbDelete_Click_DaletePurchaseOrderForm(int intPurchaseReceiptID){myParameter.DeletePurchaseReceiptID= intPurchaseReceiptID;SqlParameter[]SQlCMDpas = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@PurchaseReceiptID", SqlDbType.Int),};SQlCMDpas[0].Value = "tlsbDelete_Click_DaletePurchaseOrderForm";SQlCMDpas[1].Value = myParameter.DeletePurchaseReceiptID;returnmyDALMethod.UpdateData("PurchaseManage_frm_PurchaseOddNumbers",SQlCMDpas);}
第三步:界面层(UIL)代码,在窗体的Load事件中绑定下拉框的数据
截图效果(选择单据表某一行未审核的单据再点击删除按钮):
#region 删除 (修改有效否 = False)privatevoid tlsbDelete_Click(objectsender, EventArgs e){if(dtPurchaseBePutInStorage.Rows[intTpage]["审核否"].ToString() == "未审核") //当前单未审核 可以删除{if(myfrm_PurchaseOddNumbers.tlsbDelete_Click_DaletePurchaseOrderForm(intOrderNumber)> 0){MessageBox.Show("删除成功!");PageSkip(intTpage);ChangeColour();}}}#endregion
6、审核订单(修改审核否 == True)
第一步:数据库的存储过程
if(@Type='tlsbExamineAndVerify_Click_ExamineAndVerify')--审核订单BEGINUPDATE PurchaseReceiptTableSET ReviewWhether=@ReviewWhether, --审核否AuditDate =@AuditDate, --审核日期TheOperatorID_Reviewer= @TheOperatorID_Reviewer--审核人IDWHERE PurchaseReceiptTable.PurchaseReceiptID = @PurchaseReceiptID --采购入库单IDEND
第二步:逻辑层(BLL)代码
///<summary>///审核订单///</summary>///<paramname="bolReviewWhether">审核否</param>///<paramname="dtpAuditDate">审核日期</param>///<param name="intTheOperatorID_Reviewer">审核人</param>///<param name="intPurchaseReceiptID">采购入库单ID</param>///<returns></returns>[OperationContract]publicinttlsbExamineAndVerify_Click_ExamineAndVerify(boolbolReviewWhether, DateTime dtpAuditDate,intintTheOperatorID_Reviewer,intintPurchaseReceiptID){myParameter.ReviewWhether = bolReviewWhether;myParameter.AuditDate =dtpAuditDate;myParameter.TheOperatorID_Reviewer = intTheOperatorID_Reviewer;myParameter.PurchaseReceiptID = intPurchaseReceiptID;SqlParameter[]SQlCMDpas = {new SqlParameter("@Type", SqlDbType.Char),new SqlParameter("@ReviewWhether", SqlDbType.Bit), //审核否new SqlParameter("@AuditDate", SqlDbType.DateTime), //审核日期new SqlParameter("@TheOperatorID_Reviewer", SqlDbType.Int), //审核人new SqlParameter("@PurchaseReceiptID", SqlDbType.Int), //采购入库单ID};SQlCMDpas[0].Value = "tlsbExamineAndVerify_Click_ExamineAndVerify";SQlCMDpas[1].Value =myParameter.ReviewWhether;SQlCMDpas[2].Value =myParameter.AuditDate;SQlCMDpas[3].Value =myParameter.TheOperatorID_Reviewer;SQlCMDpas[4].Value =myParameter.PurchaseReceiptID;returnmyDALMethod.UpdateData("PurchaseManage_frm_PurchaseOddNumbers",SQlCMDpas);}
第三步:界面层(UIL)代码,在窗体的Load事件中绑定下拉框的数据
截图效果(选择单据表某一行未审核的单据再点击审核按钮):
#region 审核privatevoid tlsbExamineAndVerify_Click(object sender, EventArgse){if(PublicStaticFields.strOperatorName == null || PublicStaticFields.strOperateTypeName== null){Popup.Controls.Frm_Popup.Instance().Show();PublicStaticForm.PubLogin= new frm_Login();PublicStaticForm.PubLogin.Show();PublicStaticForm.PubLogin.TopLevel= true;}else{if(MessageBox.Show(string.Format("是否确认审核,一旦审核侧不能修改。你的姓名是【{0}】你的身份是【{1}】", PublicStaticFields.strOperatorName,PublicStaticFields.strOperateTypeName), "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) == DialogResult.Yes){intintWhetherSucceed =myfrm_PurchaseOddNumbers.tlsbExamineAndVerify_Click_ExamineAndVerify(true, DateTime.Now,PublicStaticFields.intOperatorID,intOrderNumber);//审核订单if(intWhetherSucceed > 0) //判断是否审核成功{int intIndex = dgvPurchaseBe.CurrentRow.Index; //获取当前审核行PageSkip(intTpage); //审核成功,刷新数据ChangeColour(); //审核后,行变色dgvPurchaseBe.Rows[intIndex].Selected = true; //选择刚审核行dgvPurchaseBe.FirstDisplayedScrollingRowIndex = intIndex; //滚动到审核行MessageBox.Show("恭喜!审核成功!");}}}}#endregion
以上技术仅供参考,禁止用于商业用途,上述内容不代表用友立场!
用友ERT T6 技术解析(四)采购入库 上相关推荐
- 用友ERT T6 技术解析(四)采购入库 下
7.新增采购订单 第一步:数据库的存储过程 (1)新增单据表--采购入库单 <p align="left"></p><pre name="c ...
- 用友ERP T6技术解析(五)产成品入库
2.3.2 产成品入库 介绍:产成品入库这个模块,是自己公司对自己生产的产品进行入库.主界面(2.3.2图1) 功能:[全部导出]将当前页的全部单据导出到Excel文档.[部分导出]将当前页选择的单据 ...
- 用友ERP T6技术解析(六) 库龄分析
2.4 库存管理 2.4.1 库龄分析 介绍:库存账龄是在某时间节点,某种或某类存货的库存时间的加权平均值,跟库存周转率关系明显,库存周转率越高,库存账龄越低,可是二者又不是反比关系.不能简单把库 ...
- 用友ERP T6 技术解析(一)
VS2010版本+SQL2008搭建WCF框架 1.1.1 搭建WCF服务端 第一步:打开VS2010界面,点击左上角文件,点击新建,选择项目 1.1.1(图1) 第二步:点击VisualC#模板,再 ...
- 北京络捷斯特第三方物流信息系统技术解析(四) 订单录入-运输订单
北京络捷斯特第三方物流信息系统技术解析(四) 订单录入-运输订单 2.1.3运输订单 运输订单有两个标签要编写,包括有订单信息和订单货品 订单信息界面截图: 2.1(图1) 订单货品信息截图: 2.1 ...
- 钟表维修管理系统技术解析(四) 销售单录入中的录入数据
录入销售单这个模块,可以录入销售单,如果一个客户同时修多个表,有个再录一条按钮为同一个客户录入多条销售单,最后结账如(图1)所示. (图1) 从界面上可以看到我们这里用到的控件有 控件名称 说明 日期 ...
- 大型商贸系统(进货管理)技术解析(四)自营无订单进仓单
大型商贸系统(进货管理)技术解析(四)自营无订单进仓单 功能介绍: 自营无订单进仓单为进货店的客户进行开单,是根据合同来进仓.对于自营无订单进仓单,该系统提供了2种方式:(1)实现一次性 ...
- MVC北京络捷斯特第三方物流系统技术解析(四)订单配送信息
MVC北京络捷斯特第三方物流系统技术解析(四)订单配送信息 进行了订单运输信息,想在到了订单配送信息在"订单信息"页面用户可以编辑此订单的基本信息,此页面包括订单基本信息.托运人信 ...
- WCF医院管理系统技术解析(五)体检登记(四)
WCF医院管理系统技术解析(五)体检登记(四)涉及拼音简码 体检登记中的新增病人(需要注意的是:该病人不经过挂号和处方,只是到医院进行体检)与医院中的前台登记病人不同. 对于这种情况:我的思路是:该病 ...
最新文章
- 实战:基于tensorflow 的中文语音识别模型 | CSDN博文精选
- 人性漫画:打工与创业的残酷区别……
- 常用PHP array数组函数
- BUUCTF-WEB:[HCTF 2018]WarmUp
- java抢购防止多次请求_springboot项目中接口防止恶意请求多次
- 数据结构—链表-循环链表
- mysql groupby 优化
- 如何测试WiFi路由器小包性能
- 手机浏览器哪个好用,UC、多御和QQ浏览器对比
- 前端特效 —— 八卦图旋转(纯css)
- 你所学的专业是怎么回事——摄影测量与遥感
- 简述er图的作用_ER图的理解
- 怎么查看计算机mac地址,怎么查电脑的mac地址?电脑mac地址查询方法
- 网易2019实习生招聘编程题
- 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园
- Occupancy Map(Occupancy Grid)的更新
- android 4k手机屏幕分辨率,【11-09讨论】手机上4K屏幕真的有必要吗?
- Android使用TextToSpeech实现语音播报-及默认不支持中文的方案
- 25-36.产品经理入门到精通(三)
- ORA-29702错误解决
热门文章
- 淘宝按关键字搜索淘宝商品 API 参数及返回值说明 翻页展示 含调用示例
- Linux系统查看系统日期时间、时区信息
- WIN10 AMD显卡驱动安装后 系统无法加载 解决方案
- 时间控件My97DatePicker相关配置
- java小项目:危险品检测
- rabbitmq修改端口linux,修改rabbitmq web-UI端口号
- 【深度学习】python矩阵乘积运算(multiply/maumul/*/@)
- vue跳转页面携带参数
- 隐含参数与 Library Cache 与 Shared Pool Latch 原理
- IE F12 开发人员工具控制台错误消息