[COM] Tworzenie MM pod C# - problem z dodawaniem pozycji

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, obiekty COM .NET

Moderator: mikey

marek1712
Posty: 21
Rejestracja: 25 mar 2011, 12:55
Rola: Inny
Wersja: 10

[COM] Tworzenie MM pod C# - problem z dodawaniem pozycji

Post autor: marek1712 »

Witam.
Poniżej przeklejka z forum Comarch:
Jest sobie taki kod:

Kod: Zaznacz cały

protected static IApplication Application = null;
        protected static ILogin Login = null;
        protected IAdoSession Sesja { get; private set; }

        public void ROdoMM()
        {
            Sesja = Login.CreateSession();
            var dokumenty = (CDNHlmn.DokumentyHaMag)Sesja.CreateObject("CDN.DokumentyHaMag", null);
            var dokument = (CDNHlmn.IDokumentHaMag)dokumenty.AddNew(null);

            //Tutaj jeszcze dodatkowe kolekcje

            //Ustalamy typ dokumentu na MM
            dokument.Rodzaj = 312000;
            dokument.TypDokumentu = 312;

            //Dla bezpieczeństwa (by dało się coś jeszcze poprawić) wstawiamy dokument do bufora
            dokument.Bufor = 1;
            
            //Ustawiamy datę dokumentu - z automatu na dziś
            dokument.DataDok = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

            //Ustawiamy magazyn źródłowy (standardowo pobiera z MAGAZYN)
            dokument.MagazynZrodlowyID = 1;

            //Ustawiamy magazyn docelowy (w tym przypadku brany z pola TrN_Opis) - NA RAZIE STATYCZNIE DO TESTU
            dokument.MagazynDocelowyID = 5;
            
            //Dodanie pozycji do dokumentu - docelowo z zapytania SQL
            CDNBase.ICollection pozycje = dokument.Elementy;
            var pozycja = (CDNHlmn.IElementHaMag)pozycje.AddNew(null);
            pozycja.TowarKod = "03001";
            //pozycja.TowarNazwa = "TOWAR TESTOWY";
            pozycja.Ilosc = 1;
            //pozycja.JM = "szt";
            
            //Zapisanie sesji == utworzenie transakcji? Do sprawdzenia...
            //pozycja.Session.Save();
            Sesja.Save();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            LogowanieAutomatyczne("ADMIN", null, "FIRMA_TESTOWA");
            ROdoMM();
            //Sesja.Save();
        }
Przy próbie zapisania sesji dostaję błąd:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_TrEPodmiot". The conflict occurred in database "CDN_FIRMA_TESTOWA", table "CDN.PodmiotyView".
Jeśli utworzę pusty dokument MM - błędu nie ma. Dopiero po dodaniu pozycji wywala się błędem podczas zapisu sesji. Czy ktoś mnie może naprowadzić co robię źle? Skończyły mi się pomysły, czekam na odp. z SOZ póki co.

woj
Posty: 139
Rejestracja: 22 lut 2012, 16:11
Rola: Inny

Re: [COM] Tworzenie MM pod C# - problem z dodawaniem pozycji

Post autor: woj »

Proszę podać wartości które są w polach [TrE_PodID], [TrE_PodmiotTyp] czyli id podmiotu i rodzaj podmiotu

czyli w C# Pozycja.PodmiotId i Pozycja.PodmiotTyp

marek1712
Posty: 21
Rejestracja: 25 mar 2011, 12:55
Rola: Inny
Wersja: 10

Re: [COM] Tworzenie MM pod C# - problem z dodawaniem pozycji

Post autor: marek1712 »

Witam.
A są to pola wymagane? Myślałem, że nie trzeba ich uzupełniać.
Z tego co widzę po normalnie utworzonych dokumentach MM te pola mają zawsze wartość 1. Przypisałem i nadal to samo :(

EDIT - nie wiem czy to ma znaczenie ale podczas debugowania programu właściwość Kategoria zwraca taką wartość (nic do niej nie przypisuję, w sumie przypisanie null też nic nie daje):

Kod: Zaznacz cały

'pozycja.Kategoria' threw an exception of type 'System.Runtime.InteropServices.COMException'
{"Rekord 0 nieznaleziony. Pole 'Kategoria'"}
EDIT2: EUREKA!!!
Udało się - kolega był blisko. PodId i PodmiotTyp należy ustawić dla zmiennej dokument, a nie pozycja. Gdyby się dało - bym kliknął "Pomógł" :) A tak - wirtualny browarek na weekend.

FINAL EDIT: To skoro jesteśmy w temacie, zadam ostatnie pytanie: jak dodać do dokumentu kilka towarów? ;) Bo najgłupszy pomysł - czyli tworzenie za każdym razem nowej zmiennej działa ale jest bez sensu.
FINAL EDIT2: dobra, nie było pytania. ArrayList wystarczyło ;)

ODPOWIEDZ