Wczytywanie dokumentów ze Sfery dla Subiekta

Wczytywanie dokumentów ze Sfery dla Subiekta

Wątek przeniesiony 2024-09-06 12:15 z C/C++ przez MarekR22.

DK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1
0

Cześć, piszę z pytaniem odnośnie integracji Sfery dla Subiekta GT z naszym własnym programem w c# mianowicie, chciałbym wczytać wszystkie faktury z subiekta do naszego programu poniżej fragment kodu:

Kopiuj
private static void WczytajDaneDokumentow(DataTable table)
{
    try
    {
        SuDokumenty dokumenty = SferaExtantions.Subiekt.Dokumenty;
        IEnumerator enumerator = dokumenty.GetEnumerator();
        while (enumerator.MoveNext())
        {
            SuDokument dokument = SferaExtantions.Subiekt.Dokumenty.Wczytaj(enumerator.Current);
            DataRow row = table.NewRow();
            row["id_dokumentu"] = (long)dokument.Identyfikator;
            table.Rows.Add(row);
            Console.WriteLine($"Dokument: {dokument.Numer}, {dokument.NumerOryginalny}");
        }
    }
    catch (DAOException e)
    {
        DXBox.pokazBlad("Błąd podczas wczytywania kontrahentów. ", e);
    }

Ten fragment kodu powoduje błąd ze zdjęcia.screenshot-20240906110211.png
Próbowałem zmienić sposób wczytywania, zmiana IEnumerator na foreach ale błąd pozostał.

ZC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 166
0

Wrzuciłem sobie "System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext()" w chatGpt4 i mi wyskoczyło kilka możliwości:

  1. Być może ktoś zmienił listę faktur w trakcie iteracji
  2. Błąd kolekcji
  3. Błędne zamykanie refenecji do obiektu COM
  4. Błędny stan obiektu COM -> nie został poprawnie zainicjalizowany lub błędnie zamknięty

Po czym dostałem taki kod:

Kopiuj
try
{
    // Assume enumerator is a COM enumerator
    var enumerator = comCollection.GetEnumerator();
    while (enumerator.MoveNext())
    {
        var item = enumerator.Current;
        // Process the item
    }
}
catch (COMException ex)
{
    // Handle COM-specific exceptions
    Console.WriteLine($"COM Error: {ex.Message}");
}
finally
{
    // Ensure the COM object is properly released
    if (enumerator != null)
    {
        Marshal.ReleaseComObject(enumerator);
    }
}
JD
  • Rejestracja: dni
  • Ostatnio: dni
0

a ja wszystkie operacje „read” zabierałbym sql’em a Sfery do wszelkich operacji „write”

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.