protected override void SubmitAction()
        {
            if (Datos_Partidas.Current == null)
            {
                PgMng.ShowInfoException(Face.Resources.Messages.NO_SELECTED);

                _action_result = DialogResult.Ignore;
                return;
            }

            _entity.SetSignoStock();

            if (Bultos_CkB.Checked)
            {
                if (_entity.Bultos < 0)
                {
                    if (Decimal.Round(PartidaActual.StockBultos, 2) + Decimal.Round(_entity.Bultos, 2) < 0)
                    {
                        PgMng.ShowInfoException(Resources.Messages.BULTOS_INSUFICIENTES + " " + PartidaActual.StockBultos.ToString("N2"));
                        _action_result = DialogResult.Ignore;
                        return;
                    }
                }
            }
            else
            {
                if (_entity.Kilos < 0)
                {
                    if (Decimal.Round(PartidaActual.StockKilos, 2) + Decimal.Round(_entity.Kilos, 2) < 0)
                    {
                        PgMng.ShowInfoException(Resources.Messages.STOCK_INSUFICIENTE + " " + PartidaActual.StockKilos.ToString("N2"));
                        _action_result = DialogResult.Ignore;
                        return;
                    }
                }
            }

            string msg = string.Empty;

            switch (_entity.ETipoStock)
            {
            case ETipoStock.Todos:
                msg = "Seleccione un tipo de Movimiento de Stock";
                break;

            case ETipoStock.Compra:
                msg = "Las entradas de Stock por Compra deben realizarse mediante un Albarán Recibido";
                break;

            case ETipoStock.Venta:
                msg = "Las salidas de Stock por Venta deben realizarse mediante un Albarán Emitido";
                break;

            case ETipoStock.MovimientoEntrada:
                msg = "Para dar de alta stock de otro expediente debe hacerlo realizando un Movimiento de Salida desde el expediente en cuestión";
                break;

            case ETipoStock.MovimientoSalida:
            {
                if (_entry_expedient == null)
                {
                    PgMng.ShowInfoException("No ha seleccionado el expediente de recepción de la mercancía");

                    _action_result = DialogResult.Ignore;
                    return;
                }

                try
                {
                    PgMng.Reset(4, 1, Face.Resources.Messages.SAVING, this);

                    _entity.Observaciones = String.Format(Library.Store.Resources.Messages.SALIDA_POR_MOVIMIENTO, _entry_expedient.Codigo);

                    PgMng.Grow();

                    _expedient.UpdateStocks(PartidaActual, true);
                    PgMng.Grow();

                    //_expediente.ApplyEdit();
                    //_expediente.SaveAsChild();
                    PgMng.Grow();

                    _expedient.AddMovimientoStock(ETipoStock.MovimientoSalida, _entity, _entry_expedient, _expedient.SessionCode, true);
                    _action_result = DialogResult.OK;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    PgMng.FillUp();
                }
                return;
            }

            case ETipoStock.AltaKit:
            case ETipoStock.BajaKit:
                msg = "Las entradas y salidas de Stock de este tipo deben realizarse mediante Mezclas";
                break;

            case ETipoStock.Consumo:
            {
                if (_entry_expedient == null)
                {
                    PgMng.ShowInfoException("No ha seleccionado el expediente de recepción de la mercancía");

                    _action_result = DialogResult.Ignore;
                    return;
                }

                try
                {
                    PgMng.Reset(4, 1, Face.Resources.Messages.SAVING, this);

                    _entity.Observaciones = String.Format(Library.Store.Resources.Messages.SALIDA_POR_MOVIMIENTO, _entry_expedient.Codigo);

                    PgMng.Grow();

                    _expedient.UpdateStocks(PartidaActual, true);
                    PgMng.Grow();

                    //_expediente.ApplyEdit();
                    //_expediente.SaveAsChild();
                    PgMng.Grow();

                    _expedient.AddMovimientoStock(ETipoStock.Consumo, _entity, _entry_expedient, _expedient.SessionCode, true);
                    _action_result = DialogResult.OK;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    PgMng.FillUp();
                }
                return;
            }
            }

            if (msg != string.Empty)
            {
                PgMng.ShowInfoException(msg);

                _action_result = DialogResult.Ignore;
                return;
            }

            _expedient.UpdateStocks(PartidaActual, true);

            _action_result = DialogResult.OK;
        }