mojaSymfonia FORUM
https://forum.mix-soft.pl/

Dodawanie nowych pozycji w dokumencie - InfoDok
https://forum.mix-soft.pl/viewtopic.php?f=15&t=6853
Strona 1 z 1

Autor:  WojtekM [ 2015-09-28, 13:35 ]
Tytuł:  Dodawanie nowych pozycji w dokumencie - InfoDok

Witam ponownie,
Męczyłem się przez pół dnia z dodawaniem pozycji na WB w Forte i doszedłem do tego, że najprawdopodobniej moje problemy wynikają m.in. z niewłaściwego korzystania z funkcji Begin, Insert oraz Next - chociaż wydaje mi się, że wypróbowałem wszystkie kombinacje :-(.

Mam więc pytanie jak należy je prawidłowo używać (dla uproszczenia chodzi tylko o zapisy - a nie rejestry).
Dlatego, że dane dokumentu nie są zapisywane w tabeli "zapisy" to wnioskuję, że przed dok.SetField(0, ...) nie dodaję ani Begin ani Insert, które to odnoszą się tylko do zapisów i rejestrów (index 1 lub 2 w funkcji SetField).

Na logikę Begin(1) idzie jako pierwszy przed wywołaniem pierwszego dok.SetField(1,...). Następnie dodaję pola przez SetField(1,...) a następnie... No właśnie co? Next czy Insert?

Wg dokumentacji Insert umożliwia dodanie nowego zapisu w dokumencie. A więc wydaje mi się, że powinno być przed wywołaniem Next, które to zgodnie z dokumentacją umożliwia ustawienie kolejnego zapisu w dokumencie. A żeby coś ustawić najpierw trzeba coś stworzyć (dodać). Chociaż mam tu spore wątpliwości czy ja dobrze rozumiem tą dokumentację...
A może się mylę? Bo zgodnie z dokumentacją funkcja Begin również "ustawia" pierwszy zapis - a więc wypadałoby go najpierw utworzyć. Niestety wywołanie funkcji Insert przed Begin wywala błędy...

Poniżej prezentuję swój kod, którego celem jest dodanie dwóch pozycji na wyciągu bankowym. Niestety Symfonia wywala błąd, który również załączam.
Bardzo proszę o pomoc w ustaleniu co robię źle (gdzie popełniam błąd).

Co ciekawe próba dodania tylko jednego zapisu w Forte również kończy się niepowodzeniem. Ciągle są jakieś błędy a do tego formularz ustawia konto tylko po Wn lub tylko po Ma - mimo, że ustawione jest dodanie konta po obu stronach...

kod:
Kod:
#include "fkutil.sci"
#include "dbnames.sci"

InfoDok dok

dok.bZap = dbOpenZapBase(indeksRoku(), ZRODLO_BUFOR, true)
dok.bDok = dbOpenDokBase( indeksRoku(), ZRODLO_BUFOR, true )
dok.bKsie = dbOpenDokBase( indeksRoku(), ZRODLO_BUFOR, true ) 

dok.SetField(0, "skrot", "WB")
dok.SetField(0, "nazwa", "DP/2015/08")
dok.SetField(0, "tresc", "Treść dokumentu")
dok.SetField(0, "datawpr", "2015-09-11")
dok.SetField(0, "datadok", "2015-09-11")
dok.SetField(0, "dataOper", "2015-09-11")
dok.SetField(0, "kwota", 2004)


dok.begin(1)
dok.SetField(1, "opis", "bla bla")
dok.SetField(1, "kwota", 1002)
dok.SetField(1, "strona", 0)
dok.SetField(1, "synt", 100)
dok.SetField(1, "pozycja", 0)

//dok.next(1)
dok.Insert(1)
dok.next(1)   //najpierw next później Insert... Tj. Begin -> next -> insert -> next -> insert...

dok.SetField(1, "kwota", 1002)
dok.SetField(1, "strona", 1)
dok.SetField(1, "synt", 200)
dok.SetField(1, "pozycja", 0)

//dok.next(1)
dok.Insert(1)
dok.next(1)   //najpierw next później Insert... Tj. Begin -> next -> insert -> next -> insert...

dok.SetField(1, "opis", "bla bla")
dok.SetField(1, "kwota", 1002)
dok.SetField(1, "strona", 0)
dok.SetField(1, "synt", 100)
dok.SetField(1, "pozycja", 1)

//dok.next(1)
dok.Insert(1)
dok.next(1)   //najpierw next później Insert... Tj. Begin -> next -> insert -> next -> insert...

dok.SetField(1, "kwota", 1002)
dok.SetField(1, "strona", 1)
dok.SetField(1, "synt", 200)
dok.SetField(1, "pozycja", 1)

dok.InsRec()

//ZAMYKAMY DB
DbClose(dok.bZap)
DbClose(dok.bDok)
DbClose(dok.bKsie)


Załączniki:
error.png
error.png [ 15.15 KiB | Przeglądany 4438 razy ]

Autor:  WojtekM [ 2015-09-30, 12:43 ]
Tytuł:  Re: Dodawanie nowych pozycji w dokumencie - InfoDok

Czy jest ktoś w stanie poratować w w/w zakresie?

Autor:  rafal [ 2015-09-30, 12:53 ]
Tytuł:  Re: Dodawanie nowych pozycji w dokumencie - InfoDok

chyba brakuje pola idDlaRozliczen w zapisach.

Autor:  WojtekM [ 2015-09-30, 13:28 ]
Tytuł:  Re: Dodawanie nowych pozycji w dokumencie - InfoDok

@rafal jesteś WIELKI!!!
Działa :D
Co ciekawe próbowałem dodać wcześniej to pole, ale ciągle były jakieś błędy więc dałem to później w komentarz sądząc, że jest ono nie istotne... A teraz działa O_o :)

Dzięki!!!

Autor:  zz [ 2019-02-07, 15:28 ]
Tytuł:  Re: Dodawanie nowych pozycji w dokumencie - InfoDok

W czasie wykonywania poniższego kodu mam komunikat, że dokument o takiej nazwie został już wprowadzony.
Robi mi się dok. z jednym zapisem, przy otwieraniu mam błąd o niepoprawnym rozbiciu na kontach

Kod:
#include "fkutil.sci"
#include "dbnames.sci"

InfoDok dok

dok.bZap = dbOpenZapBase(indeksRoku(), ZRODLO_BUFOR, true)
dok.bDok = dbOpenDokBase( indeksRoku(), ZRODLO_BUFOR, true )
dok.bKsie = dbOpenDokBase( indeksRoku(), ZRODLO_BUFOR, true )

dok.begin(1)
dok.SetField(0, "skrot", "WB")
dok.SetField(0, "nazwa", "DP/2015/08")
dok.SetField(0, "tresc", "Treść dokumentu")
dok.SetField(0, "datawpr", "2015-08-11")
dok.SetField(0, "datadok", "2015-08-11")
dok.SetField(0, "dataOper", "2015-08-11")
dok.SetField(0, "kwota", 1001.00)
dok.Insert(1)

dok.SetField(1, "opis", "bla bla")
dok.SetField(1, "kwota", 1002)
dok.SetField(1, "strona", 0)
dok.SetField(1, "synt", 100)
dok.SetField(1, "pozycja", 0)
dok.Insert(1)

dok.next(1)
dok.SetField(1, "kwota", 1002)
dok.SetField(1, "strona", 1)
dok.SetField(1, "synt", 200)
dok.SetField(1, "pozycja", 0)

//---------------------

dok.Insert(1)
dok.SetField(1, "opis", "xxx")
dok.SetField(1, "kwota", 1001)
dok.SetField(1, "strona", 0)
dok.SetField(1, "synt", 100)
dok.SetField(1, "pozycja", 1)

dok.Insert(1)
dok.next(1)
dok.SetField(1, "kwota", 1001)
dok.SetField(1, "strona", 1)
dok.SetField(1, "synt", 200)
dok.SetField(1, "pozycja", 1)

dok.InsRec()

//ZAMYKAMY DB
DbClose(dok.bZap)
DbClose(dok.bDok)
DbClose(dok.bKsie)


Autor:  zz [ 2019-02-08, 08:59 ]
Tytuł:  Re: Dodawanie nowych pozycji w dokumencie - InfoDok

wycofuję pytanie, brakowało oczywiście IdDlaRozliczen

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/