[gel] Die Verwendung der unten aufgeführten C/AL-Funktionen

30. Januar 2014 16:57

Hallo zusammen,

beim Buchen von Rechnungen erscheint folg. Meldung:

"Die Verwendung der unten aufgeführten C/AL-Funktionen ist während Schreibtransaktionen eingeschränkt, da mindestens eine Tabelle gesperrt wird.
'Form.RunModal' ....
"
die Fehlermeldung ist eigentlich ok, nur komischerweise wird kein RunModal etc. ausgeführt.
Code:


  IF SalesSetup."Post & Print with Job Queue" THEN
    SalesPostViaJobQueue.EnqueueSalesDoc(SalesHeader)
  ELSE BEGIN
    CODEUNIT.RUN(CODEUNIT::"Sales-Post",SalesHeader);
      GetReport(SalesHeader);

  END;
  COMMIT;


die PrintReport-Funktion (durch die GetReport-Fkt aufgerufen) wurde angepasst
Code:
      //REPORT.RUN(ReportSelection."Report ID",FALSE,FALSE,SalesInvHeader);
      REPORT.RUN(ReportSelection."Report ID",TRUE,FALSE,SalesInvHeader);


also es soll die Requ-Page angezeigt werden.
Soweit so gut.
Beim internen Test funktionierte das ganze ohne o.g. Fehlermeldung, nur beim Kunden erschien sie dann :(

keine schlimme Sache
einfach umstrukturieren und dann klappt's auch.
Code:
  IF SalesSetup."Post & Print with Job Queue" THEN
    SalesPostViaJobQueue.EnqueueSalesDoc(SalesHeader)
  ELSE BEGIN
    CODEUNIT.RUN(CODEUNIT::"Sales-Post",SalesHeader);
    //FIX
    //GetReport(SalesHeader);
    //FIX
  END;
  COMMIT;
  //FIX
  GetReport(SalesHeader);
  //FIX


als die Fehlermeldung erschien, wurde die Rechnung trotzdem gebucht - somit konnte der Code ja umgestellt werden.
Was mich verwundert, warum verlief der Test bei uns ohne Probleme, nur beim Kunden spinnt er ...komisch - hätte ja bei uns auch auf einen Fehler laufen sollen.
Es kommt noch besser - im Testmandanten des Kunden klappt es auch (ohne den derzeitigen Fix)
Im Grunde ist das Thema ja gelöst, nur mich würden eure Meinungen interessieren, warum er da ein Problemchen hat
PS: momentan noch RU4 installiert
Zuletzt geändert von sweikelt am 3. Februar 2014 11:52, insgesamt 1-mal geändert.

Re: Die Verwendung der unten aufgeführten C/AL-Funktionen

30. Januar 2014 19:29

Hallo Stephan,

es ist sehr wahrscheinlich, dass es sich dabei um unterschiedliche Konfigurationen handelt. Oftmals findet man solche Unterschiede im Bereich Automatische Lagerregulierung/-Buchung oder ähnlichem.

Deine aktuelle Korrektur wird wahrscheinlich bei aktivierter Hintergrundbuchung fehlerhaft arbeiten. Ich würde den COMMIT, bei dem du dir über die Konsequenzen in allen möglichen Szenarien im Klaren sein solltest, wenigstens in den ELSE-Zweig nach dem Codeunit-Aufruf übernehmen.

Re: Die Verwendung der unten aufgeführten C/AL-Funktionen

31. Januar 2014 09:53

ach vielen Dank, war nur ein schneller fix, natürlich hast du recht mit der Hintergrundbuchung!
man sollte nicht zwischen tür und angel versuchen, was zu fixen -.-

da der Commit Standardmäßig ausgeführt wird, tut es auch nicht weh, diesen in die beiden Zweige zu packen

Code:

  //FIX
  //IF SalesSetup."Post & Print with Job Queue" THEN
  IF SalesSetup."Post & Print with Job Queue" THEN BEGIN
    SalesPostViaJobQueue.EnqueueSalesDoc(SalesHeader);
    COMMIT;//FIX
  END//FIX
  ELSE BEGIN
    CODEUNIT.RUN(CODEUNIT::"Sales-Post",SalesHeader);
    //FIX
    COMMIT;
    GetReport(SalesHeader);
    //FIX
  END;
  //FIX
  //COMMIT;
  //FIX


es ist sehr wahrscheinlich, dass es sich dabei um unterschiedliche Konfigurationen handelt.

hmmm der Testmandant ist im Grunde so eingerichtet wie der Echtmandant - Lager wird nicht genutzt - Hintergrundbuchung momentan auch nicht.
Naja ich lasse den Thread mal heute noch offen -> vielleicht hat jemand ähnliche Erfahrungen gemacht