Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET
Moderator: mikey
laplace
Posty: 43 Rejestracja: 20 paź 2010, 09:23
Rola: Inny
Post
autor: laplace » 02 lis 2016, 09:27
Cześć,
już kilka razy odczytywałem za pomocą Hydry zaznaczone pozycje, ale tym razem mam problem: chodzi o zaznaczone towary w oknie promocji. Używam standardowego kodu:
Kod: Zaznacz cały
ADODB._Recordset recordset = Runtime.WindowController.GetQueueMarked((int)procedureId, idListy, GetCallbackThread());
try
{
int count = recordset.RecordCount;
if (count == 0)
return;
recordset.MoveFirst();
while (recordset.EOF == false)
{
ADODB.Fields fields = recordset.Fields;
pokazKomunikat(fields.Count.ToString());
string field = fields[0].Value.ToString() + "," + fields[1].Value.ToString() + "," + fields[2].Value.ToString() + "," + fields[3].Value.ToString();
pokazKomunikat(field);
//idZaznaczonychPozycji.Add(Convert.ToInt32(field));
recordset.MoveNext();
}
}
catch (Exception ex)
{
pokazKomunikat($"Błąd odczytu zaznaczonych: {ex.Message} ");
}
Zwracane wartości zmieniają się od wiersza do wiersza (czyli mechanizm działa), ale nie potrafię z niczym ugryźć zwracanych wartości (nie są to na pewno żadne gidy z bazy (TwrPromocje)).
Może ktoś z Was pracował już z tym tematem ?
Pozdrawiam
Kuba
viesiek1
Posty: 416 Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:
Post
autor: viesiek1 » 02 lis 2016, 10:47
Odczytuję ostatnio pozycje tak jak poniżej (sorry, że jako tekst, ale chciałem ci pogrubić fragment). Może tak uda się odczytać dane prawidłowo.
int lFsGidNumer = -1;
ADODB._Recordset lRecordset = Runtime.WindowController.GetQueueMarked((int)ProcId, gDocuments, GetCallbackThread());
int lCount = lRecordset.RecordCount;
if (lCount == 1)
{
var lFields = ((dynamic)lRecordset).Fields;
for (int i = 0; i < lFields.Count; i++)
{
var lField = lFields;
var lName = lField.Name;
var lValue = lField.Value;
if (String.Compare(lName.ToString().Trim(), "TYP", true) == 0 & Convert.ToInt32(lValue) != 2033)
{
Runtime.WindowController.UnlockThread();
MessageBox.Show("Wybrałeś inny typ dokumentu niż \"FS\"" + Environment.NewLine + "GidTyp: " + lValue.ToString(), "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Warning);
laplace
Posty: 43 Rejestracja: 20 paź 2010, 09:23
Rola: Inny
Post
autor: laplace » 03 lis 2016, 15:49
Dzięki - efekt ten sam. Może źle się wyraziłem: dane są odczytywane - właściwości NAME, to TYP, FIRMA, NUMER oraz LP, ale wartości do nich przypięte nie pasują mi w żaden sposób do danych w bazie.
Na pozostałych listach nie miałem takiego problemu - zwracane wartości odpowiadały GIDom w bazie, a tutaj niespodzianka:
Np dla rekodu w bazie z CDN.TwrPromocje:
Kod: Zaznacz cały
TPR_Id TPR_PrmId TPR_TwrTyp TPR_TwrFirma TPR_TwrNumer TPR_TwrLp TPR_TwgTyp TPR_TwgFirma TPR_TwgNumer TPR_TwgLp TPR_Typ TPR_Wartosc TPR_Prog TPR_Waluta TPR_FlagaNB TPR_Notatki TPR_ZstID TPR_LP TPR_RodzajCeny TPR_Wymagany TPR_LimitTyp TPR_LimitWartosc
8 8 16 1172993 17 0 0 0 0 0 3 1.9912 0.0000 PLN N 0 1 0 0 0 0.0000
Odczytane z listy wartości to:
TYP - 8248 | FIRMA- 538976288 | NUMER- 538976288 | LP- 8224
Skąd te liczby?
JarekZ
Posty: 135 Rejestracja: 02 paź 2014, 14:11
Rola: Administrator CDN XL
Lokalizacja: Bielsko Biała
Kontakt:
Post
autor: JarekZ » 03 lis 2016, 19:20
to samo jest chyba na paczkach przy wysyłce
Odpowiedź z asysty comarch - no ta lista nie jest jeszcze obsługiwana poprawnie przez standardowe mechanizmy zaznaczania dające możliwość odczytu w hydrze
czyli standard
musiałem zrobić w hydrze okno z paczkami i tam obsłużyć zaznaczanie, no ale cóż, duży może więcej.
laplace
Posty: 43 Rejestracja: 20 paź 2010, 09:23
Rola: Inny
Post
autor: laplace » 04 lis 2016, 10:51
Dzięki za info - przynajmniej nie jestem sam z tematem
apacz
Posty: 3 Rejestracja: 27 gru 2018, 21:59
Rola: Konsultant CDN XL
Post
autor: apacz » 27 kwie 2023, 21:59
Rozwiązanie poniżej:
DataTable dtchecked = new DataTable();
dtchecked.Clear();
dtchecked.Columns.Add("TYP");
dtchecked.Columns.Add("FIRMA");
dtchecked.Columns.Add("NUMER");
DataRow dtrow;
try
{
ADODB._Recordset recordset = Runtime.WindowController.GetQueueMarked((int)ProcedureId, GetWindow().AllChildren["?TabTra"].AllChildren["?lWysylki"].Id, GetCallbackThread());
int count = recordset.RecordCount;
//MessageBox.Show("LIST POS: " + count.ToString());
if (count == 0) return true;
recordset.MoveFirst();
while (recordset.EOF == false)
{
dtrow = dtchecked.NewRow();
ADODB.Fields fields = recordset.Fields;
for (int i = 0; i < fields.Count; i++)
{
string sName = fields.Name;
string sValue = fields.Value.ToString();
//Runtime.WindowController.UnlockThread();
//MessageBox.Show("LIST POS: " + sName + " " + sValue);
//Runtime.WindowController.LockThread();
if (sName == "TYP") dtrow["TYP"] = sValue;
if (sName == "FIRMA") dtrow["FIRMA"] = sValue;
if (sName == "NUMER") dtrow["NUMER"] = sValue;
}
dtchecked.Rows.Add(dtrow);
recordset.MoveNext();
}
}
catch (Exception ex)
{
//Runtime.WindowController.UnlockThread();
System.Windows.Forms.MessageBox.Show("Nie wybrano pozycji " + "\r\n\n" + ex.Message);
Runtime.WindowController.LockThread();
return true;
}