konto usunięte

Temat: Automatyczne numerowanie zamówienia

Witam,

mam pytanie dotyczące dodawania zamówienia wykorzystując procedury SQL. Podążając za dokumentacją (https://wapro24bis.assecobs.pl/plikownia/wf-mag/windows...) napisałem aplikację w języku C# dodającą nowe zamówienia wg następującego schematu:
1. Tworzę nowe zamówieni wykorzystując procedurę RM_DodajZamowienia_Server,
2. Dla każdej pozycji zamówienia wywołuję procedurę RM_DodajPozycjeZamowienia_Server,
3. Pobieram format numeracji przy użyciu JL_PobierzFormatNumeracji_Server,
4. Parametry pobrane w pkt. 3 umieszczam w odpowiednich parametrach procedury RM_ZatwierdzZamowienie_Server. Dodatkowo parametrowi @NUMER przypisuję wartość '<auto>'.

Po wywołaniu ostatniej procedury zamówienie dodaje się od systemu WF-Mag, jednakże numer zamówienia nie ma postaci pobranej w pkt. 3, a po prostu nazywa się '<auto>'. Jaka może być przyczyna braku automatycznej numeracji?
Szymon M.

Szymon M. Kierownik działu IT

Temat: Automatyczne numerowanie zamówienia

Należałoby się przyjrzeć procedurze, którą napisałeś. W/g punktów z dokumentacji teoretycznie powinno być dobrze :)

Pozdrawiam

konto usunięte

Temat: Automatyczne numerowanie zamówienia

Procedura JL_PobierzFormatNumeracji_Server:

polecenieSQL.CommandText = "JL_PobierzFormatNumeracji_Server";
polecenieSQL.CommandType = CommandType.StoredProcedure;
polecenieSQL.Parameters.Add(new SqlParameter("@id_firmy", SqlDbType.BigInt));
polecenieSQL.Parameters["@id_firmy"].Value = FirmaID;
polecenieSQL.Parameters.Add(new SqlParameter("@dokument", SqlDbType.TinyInt));
polecenieSQL.Parameters["@dokument"].Value = DOMYSLNY_DOKUMENT;
polecenieSQL.Parameters.Add(new SqlParameter("@id_typu", SqlDbType.BigInt));
polecenieSQL.Parameters["@id_typu"].Value = typDokumentuMagazynowegoID;
polecenieSQL.Parameters.Add(new SqlParameter("@id_zasobu", SqlDbType.BigInt));
polecenieSQL.Parameters["@id_zasobu"].Value = magazynID;
polecenieSQL.Parameters.Add(new SqlParameter("@format_num", SqlDbType.VarChar, 50));
polecenieSQL.Parameters["@format_num"].Direction = ParameterDirection.Output;
polecenieSQL.Parameters.Add(new SqlParameter("@okresnumeracji", SqlDbType.TinyInt));
polecenieSQL.Parameters["@okresnumeracji"].Direction = ParameterDirection.Output;
polecenieSQL.Parameters.Add(new SqlParameter("@Parametr1", SqlDbType.TinyInt));
polecenieSQL.Parameters["@Parametr1"].Direction = ParameterDirection.Output;
polecenieSQL.Parameters.Add(new SqlParameter("@Parametr2", SqlDbType.TinyInt));
polecenieSQL.Parameters["@Parametr2"].Direction = ParameterDirection.Output;

polecenieSQL.ExecuteNonQuery();


Parametry wyjściowe przypisuję do zmiennych formatNumeracji, okresNumeracji, parametr1 oraz parametr2, a następnie wykorzystuję je w procedurze RM_ZatwierdzZamowienie_Server:


polecenieSQL.Parameters.Clear();

polecenieSQL.CommandText = "RM_ZatwierdzZamowienie_Server";
polecenieSQL.CommandType = CommandType.StoredProcedure;
...
polecenieSQL.Parameters.Add(new SqlParameter("@numer", SqlDbType.VarChar, 30));
polecenieSQL.Parameters["@numer"].Value = "<auto>";
polecenieSQL.Parameters.Add(new SqlParameter("@num_format", SqlDbType.VarChar, 30));
polecenieSQL.Parameters["@num_format"].Value = formatNumeracji;
polecenieSQL.Parameters.Add(new SqlParameter("@num_okresnumeracji", SqlDbType.TinyInt));
polecenieSQL.Parameters["@num_okresnumeracji"].Value = okresNumeracji;
polecenieSQL.Parameters.Add(new SqlParameter("@num_auto", SqlDbType.TinyInt));
polecenieSQL.Parameters["@num_auto"].Value = parametr1;
polecenieSQL.Parameters.Add(new SqlParameter("@num_niezalezny", SqlDbType.TinyInt));
polecenieSQL.Parameters["@num_niezalezny"].Value = parametr2;
...

polecenieSQL.ExecuteNonQuery();


Następnie zatwierdzam dokonane zmiany - całość, tj. utworzenie zamówienia, dodanie pozycji, pobranie formatu numeracji i zatwierdzenie zamówienia zamknąłem w transakcji.
Szymon M.

Szymon M. Kierownik działu IT

Temat: Automatyczne numerowanie zamówienia

Trzeba sprawdzić czy formatNumeracji, okresNumeracji rzeczywiście pobierają jakieś wartości.
Nie mniej jednak ja bym te procedury opakował w jedną swoją np. MAGEXT_jakas_nazwa_procedury (przedrostek stosowany we własnych procedurach w WF-MAG-u zależny od kontekstu wywołania). Następnie wywołać ją po stronie aplikacji.
Wrzuciłem przykładową swoją opakowaną procedurę do bazy i wywołałem po stronie małej aplikacji w c#
Działa bez zarzutu.

P.S.
w tym wątku Pan Rafał na końcu wyjaśnił różnicę w stosowaniu procedur:
http://www.goldenline.pl/grupy/Komputery_Internet/wfma...

Dariusz Z.:
Procedura JL_PobierzFormatNumeracji_Server:

polecenieSQL.CommandText = "JL_PobierzFormatNumeracji_Server";
polecenieSQL.CommandType = CommandType.StoredProcedure;
polecenieSQL.Parameters.Add(new SqlParameter("@id_firmy", SqlDbType.BigInt));
polecenieSQL.Parameters["@id_firmy"].Value = FirmaID;
polecenieSQL.Parameters.Add(new SqlParameter("@dokument", SqlDbType.TinyInt));
polecenieSQL.Parameters["@dokument"].Value = DOMYSLNY_DOKUMENT;
polecenieSQL.Parameters.Add(new SqlParameter("@id_typu", SqlDbType.BigInt));
polecenieSQL.Parameters["@id_typu"].Value = typDokumentuMagazynowegoID;
polecenieSQL.Parameters.Add(new SqlParameter("@id_zasobu", SqlDbType.BigInt));
polecenieSQL.Parameters["@id_zasobu"].Value = magazynID;
polecenieSQL.Parameters.Add(new SqlParameter("@format_num", SqlDbType.VarChar, 50));
polecenieSQL.Parameters["@format_num"].Direction = ParameterDirection.Output;
polecenieSQL.Parameters.Add(new SqlParameter("@okresnumeracji", SqlDbType.TinyInt));
polecenieSQL.Parameters["@okresnumeracji"].Direction = ParameterDirection.Output;
polecenieSQL.Parameters.Add(new SqlParameter("@Parametr1", SqlDbType.TinyInt));
polecenieSQL.Parameters["@Parametr1"].Direction = ParameterDirection.Output;
polecenieSQL.Parameters.Add(new SqlParameter("@Parametr2", SqlDbType.TinyInt));
polecenieSQL.Parameters["@Parametr2"].Direction = ParameterDirection.Output;

polecenieSQL.ExecuteNonQuery();


Parametry wyjściowe przypisuję do zmiennych formatNumeracji, okresNumeracji, parametr1 oraz parametr2, a następnie wykorzystuję je w procedurze RM_ZatwierdzZamowienie_Server:


polecenieSQL.Parameters.Clear();

polecenieSQL.CommandText = "RM_ZatwierdzZamowienie_Server";
polecenieSQL.CommandType = CommandType.StoredProcedure;
...
polecenieSQL.Parameters.Add(new SqlParameter("@numer", SqlDbType.VarChar, 30));
polecenieSQL.Parameters["@numer"].Value = "<auto>";
polecenieSQL.Parameters.Add(new SqlParameter("@num_format", SqlDbType.VarChar, 30));
polecenieSQL.Parameters["@num_format"].Value = formatNumeracji;
polecenieSQL.Parameters.Add(new SqlParameter("@num_okresnumeracji", SqlDbType.TinyInt));
polecenieSQL.Parameters["@num_okresnumeracji"].Value = okresNumeracji;
polecenieSQL.Parameters.Add(new SqlParameter("@num_auto", SqlDbType.TinyInt));
polecenieSQL.Parameters["@num_auto"].Value = parametr1;
polecenieSQL.Parameters.Add(new SqlParameter("@num_niezalezny", SqlDbType.TinyInt));
polecenieSQL.Parameters["@num_niezalezny"].Value = parametr2;
...

polecenieSQL.ExecuteNonQuery();


Następnie zatwierdzam dokonane zmiany - całość, tj. utworzenie zamówienia, dodanie pozycji, pobranie formatu numeracji i zatwierdzenie zamówienia zamknąłem w transakcji.

konto usunięte

Temat: Automatyczne numerowanie zamówienia

Problemem okazało się niedopatrzenie - parametrowi @trybrejestracji przypisywałem wartość 1, zamiast wartości 0. Po dokonaniu zmiany generowane są prawidłowe numery zamówienia.

Dziękuję za pomoc dotyczącą stosowania odpowiednich procedur w systemie WF-Mag.

Pozdrawiam



Wyślij zaproszenie do