예제 #1
0
        /// <summary>
        /// 移動明細情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="dt"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        private void setT05_IDODTL_Update(T05_IDOHD idohd, DataTable dt)
        {
            // 登録済みデータの物理削除(del-ins)
            T05Service.T05_IDODTL_DeleteRecords(idohd.伝票番号);

            int rowIdx = 1;

            // 明細追加
            foreach (DataRow row in dt.Rows)
            {
                if (row.RowState == DataRowState.Deleted)
                {
                    continue;
                }

                T05_IDODTL dtlData = convertDataRowToT05_IDODTL_Entity(row);

                if (dtlData.品番コード <= 0)
                {
                    continue;
                }

                T05_IDODTL srdtl = new T05_IDODTL();
                srdtl.伝票番号  = dtlData.伝票番号;
                srdtl.行番号   = rowIdx;
                srdtl.品番コード = dtlData.品番コード;
                srdtl.賞味期限  = dtlData.賞味期限;
                srdtl.数量    = dtlData.数量;
                srdtl.摘要    = dtlData.摘要;

                T05Service.T05_IDODTL_Update(srdtl);

                rowIdx++;
            }
        }
예제 #2
0
        /// <summary>
        /// 移動明細情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="dt"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        private void setT05_IDODTL_Update(T05_IDOHD idohd, List <T05_IDODTL> idoDtl)
        {
            // 登録済みデータの物理削除(del-ins)
            T05Service.T05_IDODTL_DeleteRecords(idohd.伝票番号);

            // 入庫の摘要を出庫にもセット
            string p摘要 = idoDtl.Where(c => c.行番号 == 1).Select(c => c.摘要).FirstOrDefault();

            // 明細追加
            foreach (var row in idoDtl)
            {
                if (row.品番コード <= 0)
                {
                    continue;
                }

                T05_IDODTL updRow = new T05_IDODTL();
                updRow.伝票番号  = row.伝票番号;
                updRow.行番号   = row.行番号;
                updRow.品番コード = row.品番コード;
                updRow.賞味期限  = row.賞味期限;
                updRow.数量    = row.数量;
                updRow.摘要    = p摘要;

                T05Service.T05_IDODTL_Update(updRow);
            }
        }
예제 #3
0
        /// <summary>
        /// 移動入力情報を登録・更新する
        /// </summary>
        /// <param name="ds">
        /// 移動データセット
        /// [0:T05_IDOHD、1:T05_IDODTL]
        /// </param>
        /// <param name="userId">ログインユーザID</param>
        /// <returns></returns>
        public void Update(DataSet ds, int userId)
        {
            using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString()))
            {
                context.Connection.Open();

                using (var tran = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    T05Service = new T05(context, userId);
                    S03Service = new S03(context, userId);
                    S04Service = new S04(context, userId, S04.機能ID.振替入力);

                    try
                    {
                        DataRow   hdRow   = ds.Tables[TABLE_HEADER].Rows[0];
                        T05_IDOHD 振替Hd    = convertDataRowToT05_IDOHD_Entity(hdRow);
                        DataTable 振替出庫Dtl = ds.Tables[SYUKO_TABLE_DETAIL];
                        DataTable 振替入庫Dtl = ds.Tables[NYUKO_TABLE_DETAIL];


                        List <T05_IDODTL> updList = new List <T05_IDODTL>();
                        updList.Add(convertDataRowToT05_IDODTL_Entity(振替出庫Dtl.Rows[0]));
                        updList.Add(convertDataRowToT05_IDODTL_Entity(振替入庫Dtl.Rows[0]));

                        // 1>> ヘッダ情報更新
                        setT05_IDOHD_Update(振替Hd);

                        // 2>> 明細情報更新
                        setT05_IDODTL_Update(振替Hd, updList);

                        // 3>> 在庫情報更新
                        // (出荷元からの引落し)
                        if (振替Hd.出荷元倉庫コード != null)
                        {
                            setS03_STOK_Update(context, hdRow, 振替出庫Dtl, true);
                            setS04_HISTORY_Update(context, 振替Hd, 振替出庫Dtl, true);
                        }

                        // (出荷先への積上げ)
                        if (振替Hd.出荷先倉庫コード != null)
                        {
                            setS03_STOK_Update(context, hdRow, 振替入庫Dtl, false);
                            setS04_HISTORY_Update(context, 振替Hd, 振替入庫Dtl, false);
                        }

                        // 変更状態を確定
                        context.SaveChanges();

                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        throw ex;
                    }
                }
            }
        }
예제 #4
0
        /// <summary>
        /// 移動入力情報を削除する
        /// </summary>
        /// <param name="ds">
        /// 移動データセット
        /// [0:T04_AGRHD、1:T04_AGRDTL]
        /// </param>
        /// <param name="userId">ログインユーザID</param>
        /// <returns></returns>
        public void Delete(DataSet ds, int userId)
        {
            using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString()))
            {
                context.Connection.Open();

                using (var tran = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    T05Service = new T05(context, userId);
                    S03Service = new S03(context, userId);
                    S04Service = new S04(context, userId, S04.機能ID.商品移動入力);

                    try
                    {
                        DataRow   hdRow  = ds.Tables[TABLE_HEADER].Rows[0];
                        T05_IDOHD idohd  = convertDataRowToT05_IDOHD_Entity(hdRow);
                        DataTable dtlTbl = ds.Tables[TABLE_DETAIL];

                        // 1>> ヘッダ情報削除
                        T05Service.T05_IDOHD_Delete(idohd.伝票番号);


                        // 2>> 明細情報削除
                        T05Service.T05_IDODTL_Delete(idohd.伝票番号);

                        // 3>> 在庫情報更新
                        // (出荷元に戻す)
                        if (idohd.出荷元倉庫コード != null)
                        {
                            setS03_STOK_Update(context, idohd, dtlTbl, true, true);
                        }

                        // (出荷先から引落し)
                        if (idohd.出荷先倉庫コード != null)
                        {
                            setS03_STOK_Update(context, idohd, dtlTbl, false, true);
                        }

                        //履歴テーブルの削除
                        S04Service.PhysicalDeletionProductHistory(context, idohd.伝票番号, (int)S04.機能ID.商品移動入力);


                        // 変更状態を確定
                        context.SaveChanges();

                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        throw ex;
                    }
                }
            }
        }
예제 #5
0
        /// <summary>
        /// 移動入力情報を登録・更新する
        /// </summary>
        /// <param name="ds">
        /// 移動データセット
        /// [0:T04_AGRHD、1:T04_AGRDTL]
        /// </param>
        /// <param name="userId">ログインユーザID</param>
        /// <returns></returns>
        public void Update(DataSet ds, int userId)
        {
            using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString()))
            {
                context.Connection.Open();

                using (var tran = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    T05Service = new T05(context, userId);
                    S03Service = new S03(context, userId);
                    S04Service = new S04(context, userId, S04.機能ID.商品移動入力);

                    try
                    {
                        DataRow   hdRow  = ds.Tables[TABLE_HEADER].Rows[0];
                        T05_IDOHD idohd  = convertDataRowToT05_IDOHD_Entity(hdRow);
                        DataTable dtlTbl = ds.Tables[TABLE_DETAIL];

                        // 1>> ヘッダ情報更新
                        setT05_IDOHD_Update(idohd);

                        // 2>> 明細情報更新
                        setT05_IDODTL_Update(idohd, dtlTbl);

                        // 3>> 在庫情報更新
                        // (出荷元からの引落し)
                        if (idohd.出荷元倉庫コード != null)
                        {
                            setS03_STOK_Update(context, idohd, dtlTbl, true);           // No-258 Mod
                            setS04_HISTORY_Update(context, idohd, dtlTbl, true);
                        }

                        // (出荷先への積上げ)
                        if (idohd.出荷先倉庫コード != null)
                        {
                            setS03_STOK_Update(context, idohd, dtlTbl, false);           // No-258 Mod
                            setS04_HISTORY_Update(context, idohd, dtlTbl, false);
                        }

                        // 変更状態を確定
                        context.SaveChanges();

                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        throw ex;
                    }
                }
            }
        }
예제 #6
0
        /// <summary>
        /// DataRow型をT05_IDOHDエンティティに変換する
        /// </summary>
        /// <param name="drow"></param>
        /// <returns></returns>
        private T05_IDOHD convertDataRowToT05_IDOHD_Entity(DataRow drow)
        {
            T05_IDOHD agrhd = new T05_IDOHD();
            int       iVal;

            agrhd.伝票番号     = ParseNumeric <int>(drow["伝票番号"]);
            agrhd.会社名コード   = ParseNumeric <int>(drow["会社名コード"]);
            agrhd.日付       = DateTime.Parse(string.Format("{0:yyyy/MM/dd}", drow["日付"]));
            agrhd.移動区分     = ParseNumeric <int>(drow["移動区分"]);
            agrhd.出荷元倉庫コード = int.TryParse(drow["出荷元倉庫コード"].ToString(), out iVal) ? (int?)iVal : null;
            agrhd.出荷先倉庫コード = int.TryParse(drow["出荷先倉庫コード"].ToString(), out iVal) ? (int?)iVal : null;

            return(agrhd);
        }
예제 #7
0
        /// <summary>
        /// 移動ヘッダ情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="hdRow"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        private void setT05_IDOHD_Update(T05_IDOHD t05Data)
        {
            // データなしの為追加
            T05_IDOHD idohd = new T05_IDOHD();

            idohd.伝票番号     = t05Data.伝票番号;
            idohd.会社名コード   = t05Data.会社名コード;
            idohd.日付       = t05Data.日付;
            idohd.移動区分     = t05Data.移動区分;
            idohd.出荷元倉庫コード = t05Data.出荷元倉庫コード;
            idohd.出荷先倉庫コード = t05Data.出荷先倉庫コード;

            T05Service.T05_IDOHD_Update(idohd);
        }
예제 #8
0
        /// <summary>
        /// 移動ヘッダの登録・更新をおこなう
        /// </summary>
        /// <param name="idohd"></param>
        public void T05_IDOHD_Update(T05_IDOHD idohd)
        {
            // 登録データ取得
            var hdData =
                _context.T05_IDOHD
                .Where(w => w.伝票番号 == idohd.伝票番号)
                .FirstOrDefault();

            if (hdData == null)
            {
                // データなしの為追加
                T05_IDOHD ido = new T05_IDOHD();

                ido.伝票番号     = idohd.伝票番号;
                ido.会社名コード   = idohd.会社名コード;
                ido.日付       = idohd.日付;
                ido.移動区分     = idohd.移動区分;
                ido.出荷元倉庫コード = idohd.出荷元倉庫コード;
                ido.出荷先倉庫コード = idohd.出荷先倉庫コード;
                ido.登録者      = _loginUserId;
                ido.登録日時     = com.GetDbDateTime();
                ido.最終更新者    = _loginUserId;
                ido.最終更新日時   = com.GetDbDateTime();

                _context.T05_IDOHD.ApplyChanges(ido);
            }
            else
            {
                // データを更新
                hdData.会社名コード   = idohd.会社名コード;
                hdData.日付       = idohd.日付;
                hdData.移動区分     = idohd.移動区分;
                hdData.出荷元倉庫コード = idohd.出荷元倉庫コード;
                hdData.出荷先倉庫コード = idohd.出荷先倉庫コード;
                hdData.最終更新者    = _loginUserId;
                hdData.最終更新日時   = com.GetDbDateTime();
                hdData.削除者      = null;
                hdData.削除日時     = null;

                hdData.AcceptChanges();
            }
        }
예제 #9
0
        /// <summary>
        /// 入出庫履歴の登録・更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="idohd">移動ヘッダデータ</param>
        /// <param name="dtlTbl">移動明細データテーブル</param>
        /// <param name="orghd">変更前仕入ヘッダデータ</param>
        /// <param name="isSubtract">減算フラグ(True:減算,False:減算しない)</param>
        private void setS04_HISTORY_Update(TRAC3Entities context, T05_IDOHD idohd, DataTable dtlTbl, bool isSubtract)
        {
            if (isSubtract == true)
            {
                // 登録済み入出庫データの削除
                int intSlipNumber = idohd.伝票番号;
                // 入出庫データの物理削除
                S04Service.PhysicalDeletionProductHistory(context, intSlipNumber, (int)S04.機能ID.振替入力);
            }

            List <T05_IDODTL> t05dtl = getDetailDataList(dtlTbl);

            foreach (T05_IDODTL row in t05dtl)
            {
                int souko = isSubtract ? (int)idohd.出荷元倉庫コード : (int)idohd.出荷先倉庫コード;

                S04_HISTORY history = new S04_HISTORY();
                history.入出庫日  = idohd.日付;
                history.入出庫時刻 = com.GetDbDateTime().TimeOfDay;
                history.庫コード  = souko;
                history.入出庫区分 = !isSubtract ? (int)CommonConstants.入出庫区分.ID01_入庫 : (int)CommonConstants.入出庫区分.ID02_出庫;
                history.品番コード = row.品番コード;
                history.賞味期限  = row.賞味期限;
                history.数量    = decimal.ToInt32(row.数量);
                history.伝票番号  = row.伝票番号;

                Dictionary <string, string> hstDic = new Dictionary <string, string>()
                {
                    { S04.COLUMNS_NAME_入出庫日, history.入出庫日.ToString("yyyy/MM/dd") },
                    { S04.COLUMNS_NAME_倉庫コード, history.庫コード.ToString() },
                    { S04.COLUMNS_NAME_伝票番号, history.伝票番号.ToString() },
                    { S04.COLUMNS_NAME_品番コード, history.品番コード.ToString() },
                };

                // 履歴作成
                S04Service.CreateProductHistory(history);
            }
        }
예제 #10
0
        /// <summary>
        /// 入出庫履歴の登録・更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="idohd">移動ヘッダデータ</param>
        /// <param name="dtlTbl">移動明細データテーブル</param>
        /// <param name="orghd">変更前仕入ヘッダデータ</param>
        /// <param name="isSubtract">減算フラグ(True:減算,False:減算しない)</param>
        private void setS04_HISTORY_Update(TRAC3Entities context, T05_IDOHD idohd, DataTable dtlTbl, bool isSubtract)
        {
            // No-258 Mod Start
            if (isSubtract == true)
            {
                // 登録済み入出庫データの削除
                int intSlipNumber = idohd.伝票番号;
                // 入出庫データの物理削除
                S04Service.PhysicalDeletionProductHistory(context, intSlipNumber, (int)S04.機能ID.商品移動入力);
            }

            // 不要レコード除去
            DataTable dtlTblTmp = dtlTbl.Clone();

            foreach (DataRow row in dtlTbl.Rows)
            {
                T05_IDODTL dtlRow = convertDataRowToT05_IDODTL_Entity(row);

                if (dtlRow.品番コード <= 0)
                {
                    continue;
                }

                dtlTblTmp.ImportRow(row);
            }

            // 入出庫データ作成単位に集約
            var dtlTblWk = dtlTblTmp.AsEnumerable()
                           .Where(x => x.RowState != DataRowState.Deleted)
                           .GroupBy(g => new { 伝票番号    = g.Field <int>("伝票番号")
                                               , 品番コード = g.Field <int>("品番コード")
                                               , 賞味期限  = g.Field <DateTime?>("賞味期限") })
                           .Select(s => new T05_IDODTL
            {
                伝票番号  = s.Key.伝票番号,
                品番コード = s.Key.品番コード,
                賞味期限  = s.Key.賞味期限,
                数量    = s.Sum(m => m.Field <decimal>("数量"))
            })
                           .ToList();

            foreach (T05_IDODTL row in dtlTblWk)
            {
                int souko = isSubtract ? (int)idohd.出荷元倉庫コード : (int)idohd.出荷先倉庫コード;

                decimal stockQtyhist = 0;                               // No-155 Add
                stockQtyhist = row.数量;
                S04_HISTORY history = new S04_HISTORY();

                history.入出庫日  = idohd.日付;
                history.入出庫時刻 = com.GetDbDateTime().TimeOfDay;
                history.庫コード  = souko;
                history.入出庫区分 = !isSubtract ? (int)CommonConstants.入出庫区分.ID01_入庫 : (int)CommonConstants.入出庫区分.ID02_出庫;
                history.品番コード = row.品番コード;
                history.賞味期限  = row.賞味期限;
                history.数量    = decimal.ToInt32(stockQtyhist);      // No-155 Mod
                history.伝票番号  = row.伝票番号;

                Dictionary <string, string> hstDic = new Dictionary <string, string>()
                {
                    { S04.COLUMNS_NAME_入出庫日, history.入出庫日.ToString("yyyy/MM/dd") },
                    { S04.COLUMNS_NAME_倉庫コード, history.庫コード.ToString() },
                    { S04.COLUMNS_NAME_伝票番号, history.伝票番号.ToString() },
                    { S04.COLUMNS_NAME_品番コード, history.品番コード.ToString() },
                };

                // 履歴作成
                S04Service.CreateProductHistory(history);
            }
            // No-258 Mod End
        }
예제 #11
0
        /// <summary>
        /// 在庫情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="idohd">移動ヘッダデータ</param>
        /// <param name="dtlTbl">移動明細データテーブル</param>
        /// <param name="isSubtract">減算フラグ(True:減算,False:減算しない)</param>
        private void setS03_STOK_Update(TRAC3Entities context, T05_IDOHD idohd, DataTable dtlTbl, bool isSubtract, bool isDeleteFlg = false)          // No-258 Mod
        {
            foreach (DataRow row in dtlTbl.Rows)
            {
                T05_IDODTL dtlRow = convertDataRowToT05_IDODTL_Entity(row);

                if (dtlRow.品番コード <= 0)
                {
                    continue;
                }

                int souko = isSubtract ? (int)idohd.出荷元倉庫コード : (int)idohd.出荷先倉庫コード;

                #region 在庫数計算
                decimal stockQty         = 0;
                decimal oldstockQty      = 0;
                bool    iskigenChangeFlg = false; // 賞味期限変更フラグ    No-258 Add

                if (isDeleteFlg)
                {
                    stockQty = dtlRow.数量 * (isSubtract ? 1 : -1);
                }
                else if (row.RowState == DataRowState.Deleted)
                {
                    // 数量分在庫数を加減算
                    stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                }
                else if (row.RowState == DataRowState.Added)
                {
                    // 数量分在庫数を加減算
                    stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                }
                else if (row.RowState == DataRowState.Modified)
                {
                    // No-258 Mod Start
                    if (!row["賞味期限"].Equals(row["賞味期限", DataRowVersion.Original]))
                    {
                        // 賞味期限が変更された場合
                        //  減算フラグ(True:減算)の場合:旧賞味期限の在庫を加算、新賞味期限の在庫を減算する
                        //  減算フラグ(True:False)の場合:旧賞味期限の在庫を減算、新賞味期限の在庫を加算する
                        iskigenChangeFlg = true;
                        // 旧賞味期限の在庫数
                        oldstockQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]) * (isSubtract ? 1 : -1);
                        // 新賞味期限の在庫数
                        stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                    }
                    else
                    {
                        // 数量が変更された場合
                        decimal orgQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]);
                        stockQty = (dtlRow.数量 - orgQty) * (isSubtract ? -1 : 1);
                    }
                    // No-258 Mod End
                }
                else
                {
                    // 対象なし(DataRowState.Unchanged)
                    continue;
                }
                #endregion

                // No-258 Add Start
                // 賞味期限が変更された場合
                if (iskigenChangeFlg == true)
                {
                    DateTime dt;
                    S03_STOK oldStok = new S03_STOK();
                    oldStok.庫コード  = souko;
                    oldStok.品番コード = dtlRow.品番コード;
                    oldStok.賞味期限  = row["賞味期限", DataRowVersion.Original] == DBNull.Value ? AppCommon.DateTimeToDate(null, DateTime.MaxValue) :
                                    DateTime.TryParse(row["賞味期限", DataRowVersion.Original].ToString(), out dt) ? dt : AppCommon.DateTimeToDate(null, DateTime.MaxValue);
                    oldStok.在庫数 = oldstockQty;

                    // 旧賞味期限の在庫を更新
                    S03Service.S03_STOK_Update(oldStok);
                }
                // No-258 Add End

                // 対象データ設定
                S03_STOK stok = new S03_STOK();
                stok.庫コード  = souko;
                stok.品番コード = dtlRow.品番コード;
                stok.賞味期限  = AppCommon.DateTimeToDate(dtlRow.賞味期限, DateTime.MaxValue);
                stok.在庫数   = stockQty;

                // 新賞味期限の在庫を更新
                S03Service.S03_STOK_Update(stok);

                // 変更状態を確定
                context.SaveChanges();              // No-258 Add
            }
        }
예제 #12
0
        /// <summary>
        /// 在庫情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="idohd">移動ヘッダデータ</param>
        /// <param name="dtlTbl">移動明細データテーブル</param>
        /// <param name="isSubtract">減算フラグ(True:減算,False:減算しない)</param>
        private void setS03_STOK_Update(TRAC3Entities context, DataRow hdTbl, DataTable dtlTbl, bool isSubtract)
        {
            T05_IDOHD idohd = convertDataRowToT05_IDOHD_Entity(hdTbl);

            foreach (DataRow row in dtlTbl.Rows)
            {
                T05_IDODTL dtlRow = convertDataRowToT05_IDODTL_Entity(row);

                if (dtlRow.品番コード <= 0)
                {
                    continue;
                }

                int souko = isSubtract ? (int)idohd.出荷元倉庫コード : (int)idohd.出荷先倉庫コード;

                #region 在庫数計算
                decimal stockQty        = 0;
                decimal oldstockQty     = 0;
                bool    isSamekigenFlg  = false; // 賞味期限同一フラグ
                bool    isSameSoukFlg   = false; // 倉庫同一フラグ
                bool    isSameSyohinFlg = false; // 商品同一フラグ

                if (hdTbl.RowState == DataRowState.Modified)
                {
                    isSameSoukFlg = isSubtract ? CheckSameValue(hdTbl, "出荷元倉庫コード") : CheckSameValue(hdTbl, "出荷先倉庫コード");
                }

                if (row.RowState == DataRowState.Added)
                {
                    // 数量分在庫数を加減算
                    stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                }
                else if (row.RowState == DataRowState.Modified || (hdTbl.RowState == DataRowState.Modified && !isSameSoukFlg))
                {
                    // 明細を変更または前回と倉庫が異なる場合
                    isSamekigenFlg  = CheckSameValue(row, "賞味期限");
                    isSameSyohinFlg = CheckSameValue(row, "品番コード");

                    // 賞味期限、倉庫、商品が変更された場合、過去在庫を取得
                    if (!isSamekigenFlg || !isSameSoukFlg || !isSameSyohinFlg)
                    {
                        //  減算フラグ(True:減算)の場合:旧賞味期限の在庫を加算、新賞味期限の在庫を減算する
                        //  減算フラグ(True:False)の場合:旧賞味期限の在庫を減算、新賞味期限の在庫を加算する

                        // 旧賞味期限の在庫数
                        oldstockQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]) * (isSubtract ? 1 : -1);
                        // 新賞味期限の在庫数
                        stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                    }
                    else
                    {
                        // 数量が変更された場合
                        decimal orgQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]);
                        stockQty = (dtlRow.数量 - orgQty) * (isSubtract ? -1 : 1);
                    }
                }
                else
                {
                    // 明細対象なし(DataRowState.Unchanged)
                    continue;
                }
                #endregion

                // 賞味期限、倉庫、商品が変更された場合
                if ((row.RowState == DataRowState.Modified && (!isSamekigenFlg || !isSameSoukFlg)) || (hdTbl.RowState == DataRowState.Modified && !isSameSyohinFlg))
                {
                    DateTime dt;
                    S03_STOK oldStok = new S03_STOK();
                    oldStok.庫コード  = isSubtract ? int.Parse(hdTbl["出荷元倉庫コード", DataRowVersion.Original].ToString()) : int.Parse(hdTbl["出荷先倉庫コード", DataRowVersion.Original].ToString());
                    oldStok.品番コード = int.Parse(row["品番コード", DataRowVersion.Original].ToString());
                    oldStok.賞味期限  = row["賞味期限", DataRowVersion.Original] == DBNull.Value ? AppCommon.DateTimeToDate(null, DateTime.MaxValue) :
                                    DateTime.TryParse(row["賞味期限", DataRowVersion.Original].ToString(), out dt) ? dt : AppCommon.DateTimeToDate(null, DateTime.MaxValue);
                    oldStok.在庫数 = oldstockQty;

                    // 旧賞味期限の在庫を更新
                    S03Service.S03_STOK_Update(oldStok);
                }

                // 対象データ設定
                S03_STOK stok = new S03_STOK();
                stok.庫コード  = souko;
                stok.品番コード = dtlRow.品番コード;
                stok.賞味期限  = AppCommon.DateTimeToDate(dtlRow.賞味期限, DateTime.MaxValue);
                stok.在庫数   = stockQty;

                // 新賞味期限の在庫を更新
                S03Service.S03_STOK_Update(stok);

                // 変更状態を確定
                context.SaveChanges();
            }
        }