Muszę zmodyfikować kiedyś napisaną apkę do obsługi API i niestety podczas wywoływania funkcji:
Kod: Zaznacz cały
cdn_api.cdn_api.XLDodajPozycjeZam(_DokumentID, _xlDokumentZamElem);
Fatal error. 0xC0000005
at cdn_api.cdn_api.XLDodajPozycjeZam(Int32, cdn_api.XLDokumentZamElemInfo_20211)
at ConsoleApp5.Program.Main(System.String[])
Po wejściu na dodawanie pozycji wywala się aplikacja z błędem Runtime error i powyższym opisem w logach...
Nie jest to jakaś bardzo skomplikowana aplikacja. Czyżby przez zmiany z debugiem od wersji 2021 zaczął występować ten problem?
Poniżej cały kod:
Kod: Zaznacz cały
if (cdn_api.cdn_api.XLLogin(_xlLoginInfo, ref _xlSejsaID) == 0)
{
Console.Write("Zalogowano");
SqlConnection connection1;
using (connection1 =
new SqlConnection(
""))
{
connection1.Open();
SqlDataReader reader = new SqlCommand(
"select top 5 zan_gidnumer, ZaN_KntNumer from ERPXL_TEST.CDN.ZamNag where zan_stan in (3,4) and ZaN_ZamSeria in ('sk', 'ex', 'wd')",
connection1).ExecuteReader();
Console.WriteLine("Start dodawania pozycji");
while (reader.Read())
{
Console.WriteLine("Nr zamówienia: "+ reader.GetInt32("zan_gidnumer"));
int _DokumentID = 0;
int _DokumentID2 = 0;
XLDokumentZamNagInfo_20211 _DokumentZamNag = new XLDokumentZamNagInfo_20211();
_DokumentZamNag.Wersja = 20202;
_DokumentZamNag.Typ = 5;
_DokumentZamNag.KntTyp = 32;
_DokumentZamNag.ZamSeria = "P";
_DokumentZamNag.KntNumer = reader.GetInt32("ZaN_KntNumer");
Console.WriteLine("Nr kontrahenta: "+ reader.GetInt32("zan_kntnumer"));
_DokumentZamNag.Opis = ""; //Trzeba do query dodać pobieranie opisu ze źródłowego ZS
_DokumentZamNag.RealWCalosci = 1;
Console.WriteLine(_DokumentZamNag);
Console.WriteLine("Sesja: " + _xlSejsaID);
Console.WriteLine("DokumentID: " + _DokumentID);
Console.WriteLine("Zamnag: "+ _DokumentZamNag);
int num = cdn_api.cdn_api.XLNowyDokumentZam(_xlSejsaID, ref _DokumentID, _DokumentZamNag);
Console.WriteLine(_DokumentID);
//Poniżej dodać wywołanie z API MMW
SqlConnection connection2;
using (connection2 =
new SqlConnection(
""))
{
connection2.Open();
SqlDataReader reader2 =
new SqlCommand(
"select top 300 zae_twrkod, sum(zae_ilosc) ilosc, isnull(sum(TWz_IlSpr),0) stan from ERPXL_TEST.CDN.zamnag join ERPXL_TEST.cdn.zamelem on ZaE_GIDNumer=zan_gidnumer left join ERPXL_TEST.CDN.TwrZasoby on ZaE_TwrNumer=TWz_TwrNumer and twz_magnumer = 9 where zan_stan in (3,4) and ZaN_ZamSeria in ('sk', 'ex', 'wd') and zae_gidnumer = '" +
reader.GetInt32("zan_gidnumer") + "' group by zae_twrkod ", connection2).ExecuteReader();
while (reader2.Read())
{
Console.WriteLine(reader2.GetString("zae_twrkod"));
Console.WriteLine(reader2.GetDecimal("ilosc"));
Console.WriteLine(reader2.GetDecimal("stan"));
XLDokumentZamElemInfo_20211 _xlDokumentZamElem = new XLDokumentZamElemInfo_20211();
_xlDokumentZamElem.Wersja = 20202;
_xlDokumentZamElem.Ilosc = reader2.GetDecimal("ilosc").ToString("0.0000"); //trzeba będzie liczyć ile na ZZ wpadnie sztuk
_xlDokumentZamElem.Towar = reader2.GetString("zae_twrkod");
cdn_api.cdn_api.XLDodajPozycjeZam(_DokumentID, _xlDokumentZamElem);
}
Console.WriteLine("KONIEC DOKUMENTU!");
reader2.Close();
connection2.Close();
Console.WriteLine("Jestem po zamknieciu połączeń");
}
Console.WriteLine("Jestem przed zamknieciem");
XLZamkniecieDokumentuZamInfo_20211 _xlZamknijDokumentZam =
new XLZamkniecieDokumentuZamInfo_20211();
_xlZamknijDokumentZam.Wersja = 20202;
_xlZamknijDokumentZam.TrybZamkniecia = 0;
if (_xlZamknijDokumentZam != null)
num = cdn_api.cdn_api.XLZamknijDokumentZam(_DokumentID, _xlZamknijDokumentZam);
if (num == 0)
{
Console.WriteLine("Zamknięto");
//dodawanie atrybutów filtrujących zamówienia
}
Console.WriteLine("Jestem już po");
}
reader.Close();
connection1.Close();
}
}
cdn_api.cdn_api.XLLogout(_xlSejsaID);