Example #1
0
        /// <summary>
        ///     Событие, устанавливающее параметры фильтрации
        /// </summary>
        /// <param name="sender">Контрол</param>
        private void DBSelect_BeforeSearch(object sender)
        {
            _currentDbSelectCtrl.Filter.Type.Clear();
            if (!string.IsNullOrEmpty(_type))
            {
                _currentDbSelectCtrl.Filter.Type.Add(_type, DocTypeQueryType.Equals);
            }

            _currentDbSelectCtrl.Filter.Date.Clear();
            if (!string.IsNullOrEmpty(V4Page.Doc.Date.ToString("yyyyMMdd")))
            {
                _currentDbSelectCtrl.Filter.Date.DateSearchType = DateSearchType.MoreThan;
                _currentDbSelectCtrl.Filter.Date.Add(V4Page.Doc.Date.ToString("yyyyMMdd"));
            }

            _currentDbSelectCtrl.Filter.IDs.Clear();
            if (!string.IsNullOrEmpty(_linkedDocs))
            {
                var col = Convert.Str2Collection(_linkedDocs);
                foreach (var id in col)
                {
                    _currentDbSelectCtrl.Filter.IDs.Add(id);
                }

                if (col.Count > 0)
                {
                    _currentDbSelectCtrl.Filter.IDs.Inverse = true;
                }
            }
        }
        /// <summary>
        ///     Пересчет полей в соответствии с доп. ед.изм.
        /// </summary>
        private void SetAdvUnitInfo(string _oldVal)
        {
            var oldVal = 0;

            int.TryParse(_oldVal, out oldVal);
            if (oldVal == 0)
            {
                return;
            }

            //Unit old = new Unit(_oldVal.ToString(CultureInfo.InvariantCulture));
            var old = GetObjectById(typeof(Unit), _oldVal.ToString(CultureInfo.InvariantCulture)) as Unit;

            if (old != null && factUsl.Count > 0 && factUsl.ResourceId > 0)
            {
                var maxscale =
                    factUsl.Resource.GetScale4Unit(efUnit.Value, 3, Document.PlatelschikField.Value.ToString());
                factUsl.Count = Math.Round(factUsl.Count / factUsl.Resource.ConvertionCoefficient(old, factUsl.Unit),
                                           maxscale);
                efCount.Value      = Convert.Decimal2StrInit((decimal)factUsl.Count, maxscale);
                factUsl.CostOutNDS =
                    Math.Round(factUsl.CostOutNDS * (decimal)factUsl.Resource.ConvertionCoefficient(old, factUsl.Unit),
                               Scale);
                efCostOutNDS.Value = factUsl.CostOutNDS.ToString(CultureInfo.InvariantCulture);
                ShowCalcMessage(factUsl.Recalc(factUsl.CostOutNDS.ToString(), "2", "CostOutNDS", "0", Scale));
            }
        }
Example #3
0
        /// <summary>
        /// </summary>
        /// <remarks>Скопировано из v2</remarks>
        private decimal _GetCoefUe2Valuta()
        {
            var formula = FormulaField.ValueString;

            try
            {
                return(decimal.Parse(formula.Replace('.', ',')));
            }
            catch
            {
            }

            var f = formula.Replace(" ", "");

            f = f.Replace("ДатаОплаты", "ДатаОплаты()");
            f = f.Replace("ДатаРеализации", "ДатаРеализации()");
            f = f.Replace("ДатаСчета", "ДатаСчета()");
            f = ReplacePercent(f, "Percent");
            f = ReplaceOperator(f, "Multiply", '*');
            f = ReplaceOperator(f, "Devide", '/');
            f = ReplaceOperator(f, "Minus", '-');
            f = ReplaceOperator(f, "Plus", '+');


            return(Convert.Round((decimal)Exec(f), 8));
        }
Example #4
0
        /// <summary>
        ///     Загрузка параметров
        /// </summary>
        private void LoadParams(StringCollection paramNames)
        {
            if (paramNames.Count < 1)
            {
                return;
            }

            var parametersStr = Convert.Collection2Str(paramNames).Replace(",", "','");

            if (string.IsNullOrWhiteSpace(parametersStr))
            {
                return;
            }

            var sqlParams = new Dictionary <string, object> {
                { "@clid", _clid }
            };
            var dt = DBManager.GetData(string.Format(SQLQueries.q_НастройкиОбщие_Получить, parametersStr),
                                       Config.DS_user, CommandType.Text, sqlParams);

            /*
             * for (int i = 0; i< dt.Rows.Count; i++)
             * {
             *  string name = dt.Rows[i]["Параметр"].ToString().Trim();
             *  string value = dt.Rows[i]["Значение"] == DBNull.Value ? string.Empty : dt.Rows[i]["Значение"].ToString();
             *  AppParamType paramType = (AppParamType)int.Parse(dt.Rows[i]["ТипПараметра"].ToString());
             *  _params.Add(new AppParameter(name, value, paramType));
             * }
             */

            foreach (DataRow r in dt.Rows)
            {
                var dbObj = r["Параметр"];
                var name  = dbObj.ToString();

                dbObj = r["Значение"];
                var value = dbObj == DBNull.Value ? string.Empty : dbObj.ToString();

                dbObj = r["ТипПараметра"];
                var paramType = dbObj == DBNull.Value
                    ? AppParamType.NotSaved
                    : (AppParamType)int.Parse(dbObj.ToString());

                //dbObj = r["КодНастройкиКлиента"];
                //int clid = dbObj == DBNull.Value ? 0 : (int)dbObj;

                //В первую очередь добавляем параметры с требуемым _clid
                //if (clid == _clid)
                //    _params.Add(new AppParameter(name, value, paramType));
                //else
                //{
                if (!_params.Exists(p => p.Name == name))
                {
                    _params.Add(new AppParameter(name, value, paramType));
                }
                //}
            }
        }
        /// <summary>
        ///     PreRender для количества
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Count_PreRender(object sender, EventArgs e)
        {
            var maxscale = Scale;


            if (!factUsl.UnitId.ToString().IsNullEmptyOrZero())
            {
                maxscale = factUsl.Resource.GetScale4Unit(factUsl.UnitId.ToString(), 3,
                                                          Document.PlatelschikField.Value.ToString());
            }
            efCount.Value     = Convert.Decimal2StrInit((decimal)factUsl.Count, maxscale);
            efCount.Precision = maxscale;
        }
        /// <summary>
        ///     Кнопка: Сохранить
        /// </summary>
        private bool SaveData()
        {
            if (string.IsNullOrEmpty(id) || id == "0")
            {
                return(false);
            }

            var sc = new StringCollection();

            Update(sc);

            if (sc.Count > 0)
            {
                var wi = WindowsIdentity.GetCurrent();
                var wp = new WindowsPrincipal(wi);

                if (wp.IsInRole(@"EURO\Domain Admins") /*|| Page.User.IsInRole("TEST\\Programists")*/)
                {
                    if (Validation())
                    {
                        var sqlParams = new Dictionary <string, object> {
                            { "@КодСотрудника", id }
                        };
                        var sql = @"UPDATE Сотрудники SET " + Convert.Collection2Str(sc) +
                                  " WHERE КодСотрудника = @КодСотрудника";
                        DBManager.ExecuteNonQuery(sql, CommandType.Text, Config.DS_user, sqlParams);
                        return(true);
                    }

                    return(false);
                }

                if (CurrentUser.HasRole((int)Role.Кадровик) &&
                    efStatus.OriginalValue != employee.Status.ToString())
                {
                    if (sc.Count > 1)
                    {
                        ShowMessage("Вы можете менять только состояние сотрудника",
                                    Resx.GetString("errDoisserWarrning"), MessageStatus.Error);
                        return(false);
                    }

                    var sqlParams = new Dictionary <string, object>
                    {
                        { "@КодСотрудника", id },
                        { "@Состояние", efStatus.Value }
                    };

                    try
                    {
                        DBManager.ExecuteNonQuery(SQLQueries.UPDATE_СотрудникСостояние, CommandType.Text,
                                                  Config.DS_user, sqlParams);
                    }
                    catch (Exception e)
                    {
                        ShowMessage(e.Message, Resx.GetString("errDoisserWarrning"), MessageStatus.Error);
                        return(false);
                    }
                }
                else
                {
                    ShowMessage(Resx.GetString("msgNoAccess"), Resx.GetString("errDoisserWarrning"),
                                MessageStatus.Error);
                    return(false);
                }
            }

            return(true);
        }
        /// <summary>
        ///     Получение строки с ID типов документа
        /// </summary>
        /// <returns>Строка с ID типов документа</returns>
        private string GetDocTypeIDsStr()
        {
            if (DocTypeParams.Count > 0)
            {
                var typeIDs = new StringCollection();

                var selectLRSql     = "SELECT КодТипаДокумента FROM ТипыДокументов WHERE L >= @L AND R <= @R; ";
                var selectParentSql = "SELECT КодТипаДокумента FROM ТипыДокументов WHERE Parent = @Parent; ";

                DocTypeParams.ForEach(
                    type =>
                {
                    var sql = new StringBuilder();
                    switch (type.QueryType)
                    {
                    case DocTypeQueryType.Equals:
                        typeIDs.Add(type.DocTypeID);
                        break;

                    case DocTypeQueryType.WithChildren:
                        sql.Append(@"
DECLARE @L int, @R int; ");
                        sql.AppendFormat(@"
SELECT @L = L, @R = R FROM ТипыДокументов WHERE КодТипаДокумента = {0}; ", type.DocTypeID);
                        sql.Append(selectLRSql);
                        break;

                    case DocTypeQueryType.WithSynonyms:
                        sql.AppendFormat(@"
DECLARE @Parent int; 
SELECT @Parent = Parent FROM ТипыДокументов WHERE КодТипаДокумента = {0}; ", type.DocTypeID);
                        sql.Append(selectParentSql);
                        break;

                    case DocTypeQueryType.WithChildrenSynonyms:
                        sql.Append(@"
DECLARE @L int, @R int; ");
                        sql.AppendFormat(@"
SELECT @L = ISNULL(Pr.L, Ch.L), @R = ISNULL(Pr.R, Ch.R) 
FROM ТипыДокументов Ch LEFT JOIN ТипыДокументов Pr ON Pr.КодТипаДокумента = Ch.Parent WHERE Ch.КодТипаДокумента = {0}; ",
                                         type.DocTypeID);
                        sql.Append(selectLRSql);
                        break;
                    }

                    if (type.QueryType != DocTypeQueryType.Equals)
                    {
                        var dt = new DataTable();
                        try
                        {
                            dt = DBManager.GetData(sql.ToString(), Config.DS_document);
                        }
                        catch (Exception ex)
                        {
                            Logger.WriteEx(new DetailedException("Ошибка при получении типов документов в DSODoc",
                                                                 ex));
                            throw ex;
                        }

                        for (var i = 0; i < dt.Rows.Count; i++)
                        {
                            var typeID = dt.Rows[i][0].ToString();
                            if (!typeIDs.Contains(typeID))
                            {
                                typeIDs.Add(typeID);
                            }
                        }
                    }
                }
                    );
                return(Convert.Collection2Str(typeIDs));
            }

            return(string.Empty);
        }
 /// <summary>
 ///     PreRender для поля "всего"
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void Vsego_PreRender(object sender, EventArgs e)
 {
     efVsego.Value = Convert.Decimal2StrInit(factUsl.Vsego, Scale);
 }
 /// <summary>
 ///     PreRender для суммы НДС
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void SummaNDS_PreRender(object sender, EventArgs e)
 {
     efSummaNDS.Value = Convert.Decimal2StrInit(factUsl.SummaNDS, Scale);
 }
 /// <summary>
 ///     PreRender для цены без НДС
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void CostOutNDS_PreRender(object sender, EventArgs e)
 {
     efCostOutNDS.Value = Convert.Decimal2StrInit(factUsl.CostOutNDS, Scale);
 }
        /// <summary>
        ///     Обработка клиентских команд
        /// </summary>
        /// <param name="cmd">Команды</param>
        /// <param name="param">Параметры</param>
        protected override void ProcessCommand(string cmd, NameValueCollection param)
        {
            switch (cmd)
            {
            case "SaveAndClose":
                SaveData(true);
                break;

            case "SaveData":
                SaveData(false);
                break;

            case "DeleteData":
                DeleteData();
                break;

            case "CloseWindow":
                JS.Write("parent.resources_Records_Close();");
                break;

            case "DialogCostRecalc_Yes":
                var d_kol = factUsl.Count > 0 && !factUsl.Count.Equals("0") ? factUsl.Count : 1;

                var     _costOutNDS  = factUsl.CostOutNDS;
                decimal _summaOutNDS = 0;
                decimal _summaNDS    = 0;
                decimal _vsego       = 0;
                var     stavka       = factUsl.StavkaNDS;
                var     prst         = (decimal)stavka.Величина * 100;
                var     scale        = Document != null && !Document.Unavailable ? Document.CurrencyScale : 2;

                _vsego       = Convert.Round((decimal)(d_kol * (double)_costOutNDS), scale);
                _summaNDS    = Convert.Round(_vsego / (100 + prst) * prst, scale);
                _summaOutNDS = _vsego - _summaNDS;
                _costOutNDS  = Convert.Round((decimal)((double)_summaOutNDS / d_kol), scale * 2);

                var maxscale =
                    factUsl.Resource.GetScale4Unit(efUnit.Value, 3, Document.PlatelschikField.Value.ToString());
                factUsl.Count = d_kol;
                efCount.Value = Convert.Decimal2Str((decimal)factUsl.Count, maxscale, false);

                factUsl.CostOutNDS  = _costOutNDS;
                efCostOutNDS.Value  = Convert.Decimal2Str(factUsl.CostOutNDS, scale * 2, false);
                factUsl.SummaOutNDS = Convert.Round(_summaOutNDS, scale);
                efSummaOutNDS.Value = Convert.Decimal2Str(factUsl.SummaOutNDS, scale, false);
                factUsl.SummaNDS    = Convert.Round(_summaNDS, scale);
                efSummaNDS.Value    = Convert.Decimal2Str(factUsl.SummaNDS, scale, false);
                factUsl.Vsego       = Convert.Round(_vsego, scale);
                efVsego.Value       = Convert.Decimal2Str(factUsl.Vsego, scale, false);

                break;

            case "DialogCostRecalc_No":
                ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "0", Scale));
                break;

            case "DialogRecalc_Yes":
                ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "0", Scale));
                break;

            case "DialogRecalc_Recalc":
                ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "1", Scale));
                break;

            case "DialogRecalc_No":
                ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "2", Scale));
                break;

            case "DialogRecalc_Change":
                ShowCalcMessage(factUsl.Recalc(param["value"], param["ndx"], param["name"], "3", Scale));
                break;
            }
        }
Example #12
0
 /// <summary>
 ///     Преобразование коллекции к строке с разделителем ','
 /// </summary>
 public static string Collection2Str(IEnumerable <string> col)
 {
     return(Convert.Collection2Str(col));
 }
Example #13
0
 /// <summary>
 ///     Преобразование коллекции к строке с разделителем ','
 /// </summary>
 public static string Collection2Str(StringCollection col)
 {
     return(Convert.Collection2Str(col));
 }
Example #14
0
        /// <summary>
        ///     Отрисовка списка документов
        /// </summary>
        /// <param name="w"></param>
        /// <param name="dt"></param>
        /// <param name="_title"></param>
        /// <param name="_oneTitle"></param>
        /// <param name="_type"></param>
        /// <param name="_linkType"></param>
        /// <param name="fieldId"></param>
        /// <param name="field"></param>
        /// <param name="fieldEn"></param>
        private void RenderLinkedDocsInfoDetails(TextWriter w, DataTable dt, string _title, string _oneTitle,
                                                 string _type, string _linkType, string fieldId, string field, string fieldEn)
        {
            var dvSys = new DataView();

            dvSys.Table = dt;

            var dv = new DataView();

            dv.Table = dt;
            dv.Sort  = "КодРесурса1, ДатаДокумента";

            if (dv.Count == 0)
            {
                return;
            }

            Document d = null;
            //Currency cur = null;

            var     curSml   = "&nbsp;";
            var     curScale = 2;
            decimal sum      = 0;

            var dtp = V4Page.GetObjectById(typeof(DocType), _type) as DocType;

            if (!dtp.Unavailable)
            {
                w.Write("<table border=0 style='BORDER-COLLAPSE:collapse;'>");
                w.Write("<tr>");
                w.Write("<td {0}>", dv.Count == 0 ? "style=\"padding-bottom:15px;\"" : "");

                w.Write(" \"" + (V4Page.IsRusLocal ? dtp.Name : dtp.TypeDocEn) + "\"");
                w.Write(" (" + Resx.GetString("LBL_ПоПолю") + " \"" + (V4Page.IsRusLocal ? field : fieldEn) + "\")");


                w.Write(":</td>");
                w.Write("</tr>");
                w.Write("</table>");
            }

            w.Write("<table border=0 style='BORDER-COLLAPSE:collapse;padding-bottom:15px;'>");
            for (var i = 0; i < dv.Count; i++)
            {
                d = V4Page.GetObjectById(typeof(Document), dv[i]["КодДокумента"].ToString()) as Document;

                if (d.Unavailable)
                {
                    continue;
                }
                var res = d.DocumentData.ResourceId1;
                if (res.HasValue && res > 0)
                {
                    //todo
                    //cur = Currency.GetCurrency(res.Value);
                    //cur._PersonID = doc._Person1;
                    //if (cur.Unavailable || cur.ParentOf(V2.Resources.Resource._Money)) curSml = "&nbsp;";
                    //else
                    //{
                    //    curSml = cur.CurrencySymbol;
                    //    curScale = int.Parse(cur._UnitScale);
                    //}
                }
                else
                {
                    curSml = "&nbsp;";
                }

                w.Write("<tr>");
                w.Write("<td style='PADDING-LEFT:10px;' valign='top'>");

                V4Page.RenderLinkDoc(w, d.Id);
                w.Write("<img src='/styles/DocMain.gif' border=0>");
                V4Page.RenderLinkEnd(w);
                w.Write("</td>");
                w.Write("<td noWrap valign='top'>");

                V4Page.RenderLinkDoc(w, d.Id);

                w.Write(d.Number.Length > 0 ? Resx.GetString("lN") + " " + d.Number + " " : "");
                if (d.Date != DateTime.MinValue)
                {
                    w.Write(Resx.GetString("lD") + " " + d.Date.ToString("dd.MM.yyyy"));
                }
                V4Page.RenderLinkEnd(w);
                w.Write("</td>");
                w.Write("<td noWrap valign='top'style='PADDING-LEFT:5px;'>");
                if (d.Finished)
                {
                    w.Write(Resx.GetString("listComplete"));
                }
                else if (d.Signed)
                {
                    w.Write(Resx.GetString("listSigned"));
                }
                else
                {
                    w.Write(Resx.GetString("listNotSigned"));
                }
                w.Write("</td>");
                w.Write("<td align='right' noWrap valign='top' style='PADDING-LEFT:5px;'>");
                if (d.DocumentData.Money1.HasValue && d.DocumentData.Money1 > 0)
                {
                    V4Page.RenderNumber(w, d.DocumentData.Money1.Value.ToString(), curScale);
                }
                else
                {
                    w.Write("&nbsp;");
                }
                w.Write("</td>");
                w.Write("<td valign='top'>");
                w.Write(curSml);
                w.Write("</td>");
                w.Write("<td valign='top' style='PADDING-LEFT:5px;'>");
                w.Write(d.Description.Length == 0 ? "&nbsp;" : d.Description);
                w.Write("</td>");
                w.Write("</tr>");

                if (!dv[i]["КодРесурса1"].Equals(DBNull.Value) &&
                    (i < dv.Count - 1 && !dv[i + 1]["КодРесурса1"].Equals(dv[i]["КодРесурса1"]) ||
                     i == dv.Count - 1))
                {
                    dvSys.RowFilter = "КодРесурса1=" + dv[i]["КодРесурса1"];
                    if (dvSys.Count > 1)
                    {
                        sum = System.Convert.ToDecimal(dt.Compute("SUM(Money1)",
                                                                  "КодРесурса1=" + dv[i]["КодРесурса1"]));
                        w.Write("<tr>");
                        w.Write("<td colspan=3 align='right'>");
                        w.Write(Resx.GetString("listTotal") + ":");
                        w.Write("</td>");
                        w.Write("<td align='right' noWrap style='PADDING-LEFT:5px;'>");
                        V4Page.RenderNumber(w, Convert.Decimal2Str(sum, curScale), curScale);
                        w.Write("</td>");
                        w.Write("<td>");
                        w.Write(curSml);
                        w.Write("</td>");
                        w.Write("<td>");
                        w.Write("&nbsp;");
                        w.Write("</td>");
                        w.Write("</tr>");
                    }
                }

                curScale = 2;
                curSml   = "&nbsp;";
            }

            w.Write("</table>");
        }
Example #15
0
        /// <summary>
        ///     Пересчет сумм
        /// </summary>
        /// <param name="oldValue">Старое значение поля</param>
        /// <param name="inx">Индекс</param>
        /// <param name="name">Название поля</param>
        /// <param name="whatDo">Индекс действия</param>
        /// <param name="scale">Точность</param>
        public string Recalc(string oldValue, string inx, string name, string whatDo, int scale)
        {
            var message = string.Empty;

            /*
             * Элемент = 1 - поле Товар
             *         2 - поле Цена
             *         3 - поле Количество
             *         4 - поле Сумма
             *         5 - поле НДС
             *         8 - поле Всего
             */

            if (whatDo.Equals(""))
            {
                return(message);
            }
            if (whatDo.Equals("2"))
            {
                switch (name)
                {
                case "Count":
                    Count = Convert.Str2Double(oldValue);
                    break;

                case "CostOutNDS":
                    CostOutNDS = Convert.Str2Decimal(oldValue);
                    break;

                case "StavkaNDS":
                    int number;
                    int.TryParse(oldValue, out number);
                    StavkaNDSId = number;
                    break;

                case "SummaOutNDS":
                    SummaOutNDS = Convert.Str2Decimal(oldValue);
                    break;

                case "SummaNDS":
                    SummaNDS = Convert.Str2Decimal(oldValue);
                    break;

                case "Vsego":
                    Vsego = Convert.Str2Decimal(oldValue);
                    break;
                }

                return(message);
            }

            var d_kol = Count > 0 && !Count.Equals(0) ? Count : 1;

            var _costOutNDS  = CostOutNDS > 0 ? CostOutNDS : 0;
            var _summaOutNDS = SummaOutNDS > 0 ? SummaOutNDS : 0;
            var _summaNDS    = SummaNDS > 0 ? SummaNDS : 0;
            var _vsego       = Vsego > 0 ? Vsego : 0;
            var _stavkaNDS   = StavkaNDSId > 0 ? StavkaNDS.Величина : 0;

            switch (int.Parse(inx) * 10 + int.Parse(whatDo))
            {
            case 10:
            case 20:
            case 30:     //изменение товара, изменение цены, изменение количества

                if (_costOutNDS == 0 && _summaOutNDS != 0)
                {
                    _costOutNDS = Convert.Round((decimal)((double)_summaOutNDS / d_kol), 4);
                }
                _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 2);
                _summaNDS    = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2);

                _vsego = _summaOutNDS + _summaNDS;
                break;

            case 40:     //изменение суммы и перерасчет
                _summaOutNDS = Convert.Round(_summaOutNDS, 2);

                _costOutNDS = Convert.Round((decimal)((double)_summaOutNDS / d_kol), 4);
                _summaNDS   = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2);
                _vsego      = _summaOutNDS + _summaNDS;
                break;

            case 41:     // обратный перерасчет суммы
                _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 2);
                _summaNDS    = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2);
                _vsego       = _summaOutNDS + _summaNDS;

                break;

            case 43:     //принудительное задание суммы
                _summaOutNDS = Convert.Round(_summaOutNDS, 2);
                break;

            case 50:     // изменение НДС
                _summaNDS    = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2);
                _summaOutNDS = Convert.Round(_summaOutNDS, 2);
                _vsego       = _summaOutNDS + _summaNDS;
                break;

            case 51:     //перерасчет обратно НДС
                _summaNDS = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2);
                _vsego    = _summaOutNDS + _summaNDS;
                break;

            case 53:     //принудительное задание ндс
                _summaNDS = Convert.Round(_summaNDS, 2);
                break;

            case 60:     // изменение Акциза
            case 61:     // перерасчет обратно Акциза
            case 63:     // принудительное задание Акциза
                break;

            case 70:     // изменение ГСМ
            case 71:     // перерасчет обратно ГСМ
            case 73:     // принудительное задание ГСМ
                break;

            case 80:     //изменение Всего и перерасчет
                decimal oldCost = 0;
                _vsego       = Convert.Round(_vsego, 3);
                _costOutNDS  = Convert.Round((decimal)((double)_vsego / ((1 + _stavkaNDS) * d_kol)), 4);
                _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 3);
                _summaNDS    = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2);

                do
                {
                    if (_summaOutNDS + _summaNDS < _vsego)
                    {
                        if (_stavkaNDS != 0)
                        {
                            _summaNDS = _vsego - _summaOutNDS;
                            // В результате округления были слегка завышены налоги.
                            message = "TTN_msgTaxInflated";
                        }
                        else
                        {
                            _vsego = _summaOutNDS + _summaNDS;
                            // В результате округления было изменено значение Всего.
                            message = "TTN_msgVsegoChanged";
                        }
                    }
                    else if (_summaOutNDS + _summaNDS > _vsego)
                    {
                        oldCost = _costOutNDS;
                        if (d_kol > 100)
                        {
                            _costOutNDS = _costOutNDS - Convert.Str2Decimal("0.0001");
                        }
                        else if (d_kol <= 100)
                        {
                            _summaOutNDS = _summaOutNDS - Convert.Str2Decimal("0.01");
                            _costOutNDS  = Convert.Round((decimal)((double)_summaOutNDS / d_kol), 4);
                        }

                        _summaOutNDS = Convert.Round((decimal)((double)_costOutNDS * d_kol), 2);
                        _summaNDS    = Convert.Round((decimal)((double)_summaOutNDS * _stavkaNDS), 2);
                    }
                    else
                    {
                        break;
                    }
                } while (_summaOutNDS + _summaNDS != _vsego || _costOutNDS <= Convert.Str2Decimal("0.0001"));

                if ((oldCost == _costOutNDS || _costOutNDS <= Convert.Str2Decimal("0.0001")) && _costOutNDS != 0)
                {
                    if (_costOutNDS == 0)
                    {
                        _costOutNDS = Convert.Str2Decimal("0.0001");
                    }
                    // Округление прошло не удачно.
                    message = "TTN_msgRoundingNotSuccessful.";
                }

                break;

            case 81:     // перерасчет обратно Всего
                _vsego = _summaOutNDS + _summaNDS;

                break;

            case 83:     // принудительное задание Всего
                _vsego = Convert.Round(_vsego, 2);
                break;
            }

            CostOutNDS  = Convert.Round(_costOutNDS, scale * 2);
            SummaOutNDS = Convert.Round(_summaOutNDS, scale);
            SummaNDS    = Convert.Round(_summaNDS, scale);
            Vsego       = Convert.Round(_vsego, scale);

            return(message);
        }