Witam
Popełniłem program, który poprzez API XL m.in. zakłada dokumenty ZK.
Jednak od jakiegoś czasu zaczął się dziwnie zachowywać.
Dokument jest niby zakładany, pojawia się w programie.
Jednak wywołanie XlZamknijDokumentZlc zwraca GIDNumer=0.
Dokument istnieje w programie aż do ponownego zalogowania się do XL.
Przy ponownym logowaniu znika.
Bardzo proszę o jakąś podpowiedź.
API XL Dokumenty ZK
Moderator: mikey
Re: API XL Dokumenty ZK
Cześć,
Przydał kod, który "popełniłeś", bez tego trudno coś wywnioskować.
Czy funkcja zwraca jakiś kod błędu?
Przydał kod, który "popełniłeś", bez tego trudno coś wywnioskować.
Czy funkcja zwraca jakiś kod błędu?
Re: API XL Dokumenty ZK
Właśnie w tym problem, że nie zwraca, nawet ostrzeżenia.
Kod spreparuję i zaraz podeślę.
Ale kod działał.
Kod spreparuję i zaraz podeślę.
Ale kod działał.
Re: API XL Dokumenty ZK
To kluczowy fragment kodu:
logger.Debug("Dodawanie ZK dla zlecenia ");
try
{
// Dodanie ZK - nagłowek
XLDokumentZlcNagInfo_22 nag = new XLDokumentZlcNagInfo_22();
nag.Wersja = this.connect.Wersja;
nag.Typ = 4192;
nag.Tryb = 2;
nag.MaZTyp = 208;
nag.MaZFirma = 215553;
nag.MaZNumer = 2;
nag.MaZLp = 0;
nag.MaDTyp = 208;
nag.MaDFirma = 215553;
nag.MaDNumer = 1;
nag.MaDLp = 0;
nag.DataRealizacji = (new DateTime(2013, 7,31)).ToCDNDate();
int zlcId = 0;
logger.Trace("Tworzenie dokumentu ZK");
int res = cdn_api.cdn_api.XlNowyDokumentZlc(this.sesja, ref zlcId, nag);
if(res != 0)
{
string err = this.getBlad(FunctionsEnum.NowyDokumentZlc, 0, res);
if(!err.IsNullOrEmpty())
{
logger.Error("Błąd dodania ZK : " + err);
}
else
{
logger.Error("Błąd dodania ZK , result : " + res.ToString());
}
return;
}
if(nag.Flagi != 0)
{
string err = this.getBlad(FunctionsEnum.NowyDokumentZlc, nag.Flagi, 0);
if(!err.IsNullOrEmpty())
{
logger.Debug("Ostrzerzenie przy dodaniu ZK : " + err);
}
else
logger.Debug("Ostrzerzenie przy dodaniu ZK , flagi : " + nag.Flagi.ToString());
}
// Zamknięcie ZK
XLZamkniecieDokumentuZlcInfo_22 zam = new XLZamkniecieDokumentuZlcInfo_22();
zam.Wersja = this.connect.Wersja;
zam.TrybZamkniecia = 0;
logger.Trace("Zamknięcie ZK");
res = cdn_api.cdn_api.XlZamknijDokumentZlc(zlcId, zam);
if(res != 0)
{
string err = this.getBlad(FunctionsEnum.ZamknijDokumentZlc, 0, res);
if(!err.IsNullOrEmpty())
{
logger.Debug("Błąd zamknięcia ZK : " + err);
}
else
{
logger.Debug("Błąd zamknięcia ZK, result : " + res.ToString());
}
return;
}
if(zam.Flagi != 0)
{
string err = this.getBlad(FunctionsEnum.ZamknijDokumentZlc, zam.Flagi, 0);
if(!err.IsNullOrEmpty())
{
logger.Debug("Ostrzeżenie przy zamknięcia ZK : " + err);
}
else
logger.Debug("Ostrzeżenie przy zamknięcia ZK , flagi : " + zam.Flagi.ToString());
}
// Pobranie id'u
logger.Debug("ID " + zlcId.ToString() + " GIDNr " + zam.GIDNumer.ToString() + " nag GID" + nag.GIDNumer); // Własnie tu sprawdzam, że zam.GIDNumer=0 a nag.GIDNumer jest wypełniony poprawnie
zlcId = zam.GIDNumer;
if(zlcId > 0)
{
logger.Debug("Dodano ZK dla zlecenia " + zam.GIDNumer);
}
else
{
logger.Error("Błąd dodania ZK dla zlecenia - brak ID'u ");
}
}
catch(Exception ex)
{
logger.Debug("Błąd importu zlecenia kompletacji " );
logger.ErrorException("Błąd importu zlecenia kompletacji " , ex);
}
}
logger.Debug("Dodawanie ZK dla zlecenia ");
try
{
// Dodanie ZK - nagłowek
XLDokumentZlcNagInfo_22 nag = new XLDokumentZlcNagInfo_22();
nag.Wersja = this.connect.Wersja;
nag.Typ = 4192;
nag.Tryb = 2;
nag.MaZTyp = 208;
nag.MaZFirma = 215553;
nag.MaZNumer = 2;
nag.MaZLp = 0;
nag.MaDTyp = 208;
nag.MaDFirma = 215553;
nag.MaDNumer = 1;
nag.MaDLp = 0;
nag.DataRealizacji = (new DateTime(2013, 7,31)).ToCDNDate();
int zlcId = 0;
logger.Trace("Tworzenie dokumentu ZK");
int res = cdn_api.cdn_api.XlNowyDokumentZlc(this.sesja, ref zlcId, nag);
if(res != 0)
{
string err = this.getBlad(FunctionsEnum.NowyDokumentZlc, 0, res);
if(!err.IsNullOrEmpty())
{
logger.Error("Błąd dodania ZK : " + err);
}
else
{
logger.Error("Błąd dodania ZK , result : " + res.ToString());
}
return;
}
if(nag.Flagi != 0)
{
string err = this.getBlad(FunctionsEnum.NowyDokumentZlc, nag.Flagi, 0);
if(!err.IsNullOrEmpty())
{
logger.Debug("Ostrzerzenie przy dodaniu ZK : " + err);
}
else
logger.Debug("Ostrzerzenie przy dodaniu ZK , flagi : " + nag.Flagi.ToString());
}
// Zamknięcie ZK
XLZamkniecieDokumentuZlcInfo_22 zam = new XLZamkniecieDokumentuZlcInfo_22();
zam.Wersja = this.connect.Wersja;
zam.TrybZamkniecia = 0;
logger.Trace("Zamknięcie ZK");
res = cdn_api.cdn_api.XlZamknijDokumentZlc(zlcId, zam);
if(res != 0)
{
string err = this.getBlad(FunctionsEnum.ZamknijDokumentZlc, 0, res);
if(!err.IsNullOrEmpty())
{
logger.Debug("Błąd zamknięcia ZK : " + err);
}
else
{
logger.Debug("Błąd zamknięcia ZK, result : " + res.ToString());
}
return;
}
if(zam.Flagi != 0)
{
string err = this.getBlad(FunctionsEnum.ZamknijDokumentZlc, zam.Flagi, 0);
if(!err.IsNullOrEmpty())
{
logger.Debug("Ostrzeżenie przy zamknięcia ZK : " + err);
}
else
logger.Debug("Ostrzeżenie przy zamknięcia ZK , flagi : " + zam.Flagi.ToString());
}
// Pobranie id'u
logger.Debug("ID " + zlcId.ToString() + " GIDNr " + zam.GIDNumer.ToString() + " nag GID" + nag.GIDNumer); // Własnie tu sprawdzam, że zam.GIDNumer=0 a nag.GIDNumer jest wypełniony poprawnie
zlcId = zam.GIDNumer;
if(zlcId > 0)
{
logger.Debug("Dodano ZK dla zlecenia " + zam.GIDNumer);
}
else
{
logger.Error("Błąd dodania ZK dla zlecenia - brak ID'u ");
}
}
catch(Exception ex)
{
logger.Debug("Błąd importu zlecenia kompletacji " );
logger.ErrorException("Błąd importu zlecenia kompletacji " , ex);
}
}
Re: API XL Dokumenty ZK
Dodam jeszcze, że odkryłem, ze problem jest w polu ZcN_Aktywny, które ma ustawiona wartość i oznacza, ze dokument jest cały czas otwarty.
Jeżeli 'ręcznie' ustawię 0 w tym polu to jest ok.
Czyli problem jest w procedurze zamykającej dokument, która go nie zamyka.
Jeżeli 'ręcznie' ustawię 0 w tym polu to jest ok.
Czyli problem jest w procedurze zamykającej dokument, która go nie zamyka.