21.12.2011 15:42
CrazyWolf
 
Реализовал понижение до черновика, но при попытке понизить черновик до блокировки выходит
Код:
ORA-20502: Функция проверки: "Проверка на соответствие номера документа условиям его генерации"
ORA-06512: на  line 1ORA-20502: Функция проверки: "Проверка на соответствие номера документа условиям его генерации"
ORA-06512: на  line 1
21.12.2011 16:26
vdm
 
Скрипт под supermag выполняется ?
Попробуй для его должности в административном модуле отключи эту проверку.
22.12.2011 10:51
CrazyWolf
 
Еще раз спасибо, кажется заработало.
Если нужно могу выложить куски когда на C#.
22.12.2011 13:08
Mtirt
 
Выкладывай. Кто-нибудь рано или поздно пойдет по твоим стопам...
22.12.2011 14:05
CrazyWolf
 
Как и уважаемый vdm хочу предупредить что все это надо тщательно тестировать, пока вот такие черновые варианты.
1. Собсвенно функция блокировки
на вход строка коннекта к БД, тип документа и его номер все стринговое
на выходе - булево успешно али нет
Код:
private bool BlockDocument(string strOraConn, string strDocType, string strDocId)
        {
            using (var conOra = new OracleConnection(strOraConn))
            {
                conOra.Open();
                const string txtSql = "declare " +
                                          "res number; " +
                                          "curdocstate number; " +
                                          "DOCTYPE supermag.smdocuments.doctype%TYPE := :vDocTypeID;  " +
                                          "DOCID   supermag.smdocuments.id%TYPE      := :vDocID;  " +
                                        "begin " +
                                          "if supermag.core.getproc is null then " +
                                             "res := supermag.Core.StartSMApp(); " +
                                          "end if; " +
                                          "supermag.SMDOCLOCK(DOCTYPE, DOCID); " +
                                          "begin " +
                                            "supermag.SMENABLEACTUALIZEGOODS; " +
                                            "select docstate into curdocstate from smdocuments where doctype = DOCTYPE and id = DOCID; " +
                                            "if curdocstate = 2 then " +
                                                "supermag.documents.changedocstate(DOCTYPE, DOCID, 2, 1); " +
                                                "supermag.documents.changedocstate(DOCTYPE, DOCID, 1, 0); " +
                                            "else " +
                                                "supermag.documents.changedocstate(DOCTYPE, DOCID, 1, 0); " +
                                            "end if; " +
                                            "supermag.SMACTUALIZEGOODS; " +
                                            "supermag.SMDOCUNLOCK(DOCTYPE, DOCID); " +
                                          "exception when others then " +
                                            "supermag.SMDOCUNLOCK(DOCTYPE, DOCID); " +
                                            "raise; " +
                                          "end; " +
                                        "end;";
                using (var cmd = new OracleCommand(txtSql, conOra))
                {
                    cmd.Parameters.Add(new OracleParameter("vDocTypeID", OracleType.VarChar));
                    cmd.Parameters["vDocTypeID"].Value = strDocType;
                    cmd.Parameters.Add(new OracleParameter("vDocID", OracleType.VarChar));
                    cmd.Parameters["vDocID"].Value = strDocId;
                    try
                    {
                        cmd.ExecuteNonQuery();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        return false;
                    }
                }
            }
        }
Добавлено через 9 минут 43 секунды
Пытаюсь запостить еще часть кога ругается на нарушение правил. Может он так на регулярное выражение реагирует?

Добавлено через 2 минуты 35 секунд
ЗЗЫ я так понял что при смене статуса атким образом рассылка в базы магазинов происходит автоматически, а вот стату более чем на одну ступень менять нельзя.
23.12.2011 12:07
OlegON
 
Продолжение от CrazyWolf
Код:
2. Кусок когда для разбора текста заявки регулярными выражениями

using (var conSql = new SqlConnection(connString))
            {
                conSql.Open();
                const string strsql = @" тут запрос который вовращает нужные нам заявки";
                using (var cmdSql = new SqlCommand(strsql, conSql))
                {
                    cmdSql.Parameters.Add(new SqlParameter("@date", dtpChecksOrders.Value.Date));
                    using (var sqlReader = cmdSql.ExecuteReader())
                    {
                        _dtOrders.Clear();
                        while(sqlReader.Read())
                        {
                            MatchCollection matches = Regex.Matches(sqlReader["Problem_description"].ToString(), @"(\d{1}ЗП\d{7})");
                            foreach (Match match in matches)
                            {
                                _dtOrders.Rows.Add(Convert.ToInt32(sqlReader["id"]), match.Groups[1].Value, sqlReader["User_name"].ToString());
                            }
                        }
                        dgvBlockOrders.DataSource = _dtOrders;
                    }
                }
            }

где _dtOrders
_dtOrders = new DataTable();
_dtOrders.Columns.Add("IDDemands", typeof(int));
_dtOrders.Columns.Add("IDOrders", typeof(string));
_dtOrders.Columns.Add("From", typeof(string));
19.01.2012 10:45
CrazyWolf
 
Пока обкатка проходит нормально, проблем нет, функция слегка доработалась
Код:
public static bool BlockDocument(string strOraConn, string strDocType, string strDocId)
        {
            using (var conOra = new OracleConnection(strOraConn))
            {
                conOra.Open();
                const string txtSql = "declare " +
                                          "res number; " +
                                          "curdocstate number; " +
                                          "existdoc number; " +
                                          "DOCTYPE supermag.smdocuments.doctype%TYPE := :vDocTypeID;  " +
                                          "DOCID   supermag.smdocuments.id%TYPE      := :vDocID;  " +
                                        "begin " +
                                          "if supermag.core.getproc is null then " +
                                             "res := supermag.Core.StartSMApp(); " +
                                          "end if; " +
                                          "begin " +
                                            "supermag.SMDOCLOCK(DOCTYPE, DOCID); " +
                                            "select count(id) into existdoc from smdocuments where doctype = DOCTYPE and id = DOCID and DOCSTATE <> 0; " +
                                            "if existdoc > 0 then " +
                                                "supermag.SMENABLEACTUALIZEGOODS; " +
                                                "select docstate into curdocstate from smdocuments where doctype = DOCTYPE and id = DOCID; " +
                                                "if curdocstate = 2 then " +
                                                    "supermag.documents.changedocstate(DOCTYPE, DOCID, 2, 1); " +
                                                    "supermag.documents.changedocstate(DOCTYPE, DOCID, 1, 0); " +
                                                "else " +
                                                    "supermag.documents.changedocstate(DOCTYPE, DOCID, 1, 0); " +
                                                "end if; " +
                                                "supermag.SMACTUALIZEGOODS; " +
                                                "supermag.SMDOCUNLOCK(DOCTYPE, DOCID); " +
                                            "end if; " +
                                          "exception when others then " +
                                            "supermag.SMDOCUNLOCK(DOCTYPE, DOCID); " +
                                            "raise; " +
                                          "end; " +
                                        "end;";
                using (var cmd = new OracleCommand(txtSql, conOra))
                {
                    cmd.Parameters.Add(new OracleParameter("vDocTypeID", OracleType.VarChar));
                    cmd.Parameters["vDocTypeID"].Value = strDocType;
                    cmd.Parameters.Add(new OracleParameter("vDocID", OracleType.VarChar));
                    cmd.Parameters["vDocID"].Value = strDocId;
                    try
                    {
                        cmd.ExecuteNonQuery();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        return false;
                    }
                }
            }
        }
Часовой пояс GMT +3, время: 01:29.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.