1c prompte Leistung. Merkmale der Arbeit des Dokumentenformulars


  1. Ich studiere das Thema. Die Situation ist so, dass die Nuancen des Themas ziemlich klar sind, aber das Gesamtbild ist nicht vollständig. Ich bitte Sie, zwei Punkte zu kommentieren, die ich aus dem, was ich studiert habe, abgeleitet habe, aber ich bin mir ihrer Richtigkeit bei weitem nicht sicher.

    1. Die Technik und das Konzept der "Operational Execution" sind sehr bedingt und abstrakt, in dem Sinne, dass die Plattform als solche zu nichts verpflichtet. Jene. zunächst sind die Dokumente "operational" und "non-operational" völlig gleichberechtigt und in keiner Weise unterscheidbar.
    2. Der Unterschied zwischen diesen und diesen tritt nur in dem Moment auf, in dem die Person, die ihre eigene Konfiguration betreibt, den zweiten Parameter des PostProcessing-Ereignishandlers analysiert (der Parametername ist Mode). Es fügt eine Verzweigung an der Analysestelle IF ... THEN und hier ein, und nur hier, der Unterschied zwischen diesem und jenem erscheint. Und auch hier wird der Unterschied nicht zwischen Dokumenten liegen, sondern zwischen Prozessen = Algorithmen für deren Implementierung. Jene. die Plattform macht am meisten - es wird von der Art des Dirigierens berichtet. Was mit diesem Wissen zu tun ist, wie man darauf reagiert und ob man überhaupt reagiert – es geht um den jeweiligen Autor einer bestimmten Konfiguration.

    Ist es richtig geschrieben?

  2. Um ehrlich zu sein, ist mir persönlich der Zug Ihrer Gedanken als zweites Thema überhaupt nicht klar. Es ist einfach. Ein Dokument ist ein Konfigurationsmetadatenobjekt. Es soll die Tatsache eines Ereignisses im Unternehmen widerspiegeln. Das Dokument macht in verschiedenen Registern sogenannte Bewegungen (oder auch nicht). (Ich denke, Ihr nächstes Thema wird sich um Register drehen). Das häufigste Beispiel ist der Wareneingang im Lager. In 1C gibt es ein solches Konzept wie eine Folge von Dokumenten, d.h. Dokumente sind eindeutig zeitgebunden. Damit kommen wir zum Wichtigsten. Belege können zeitnah und nicht zeitnah gebucht werden. Prompt bedeutet zum aktuellen Zeitpunkt. Und funktionsunfähig bedeutet ein Datum, das sich von der aktuellen Zeit unterscheidet. Ausgezeichnet und nur nach unten, d.h. Sie können keinen Beleg mit einem zukünftigen Datum buchen. Solange ich programmiere, ist mir noch nie aufgefallen, dass es im Verarbeitungscode eine Bindung an den Haltemodus gab.
  3. 1. Die Technik und das Konzept der "Operational Execution" sind sehr bedingt und abstrakt, in dem Sinne, dass die Plattform als solche zu nichts verpflichtet. Jene. zunächst sind die Dokumente "operational" und "non-operational" völlig gleichberechtigt und in keiner Weise unterscheidbar

    Zum erweitern klicken ...

    Es ist nicht konventionell und abstrakt, sondern ganz konkret. Laden Sie das Buch "Solution of Applied Problems" 1C herunter und lesen Sie es dort, bis Sie vollständig erleuchtet sind.

  4. Prompt bedeutet zum aktuellen Zeitpunkt. Und funktionsunfähig bedeutet ein Datum, das sich von der aktuellen Zeit unterscheidet. Ausgezeichnet und nur nach unten, d.h. Sie können keinen Beleg mit einem zukünftigen Datum buchen.

    Zum erweitern klicken ...

    Solange ich programmiere, ist mir noch nie aufgefallen, dass es im Verarbeitungscode eine Bindung an den Haltemodus gab.

    Zum erweitern klicken ...

    Und das, entschuldigen Sie, sieht im Allgemeinen nach einem fetten Trolling aus. Nun, Radchenko, die erste Erwähnung des diskutierten und ein einfaches Beispiel zu dieser Erwähnung - sofort verzweigt sich die Verarbeitung je nach Modus. Der zweite Parameter in der ProcessingConduct-Plattform, warum überträgt er Ihrer Meinung nach? Was schlagen Sie im Allgemeinen mit diesen beiden Modi vor, abgesehen von ihrer Analyse in der Verarbeitung?

    aber ganz konkret

    Zum erweitern klicken ...

    Nun, es gibt einen Code / ein Beispiel für eine Konfiguration, die zeigt / beweist, dass die Plattform (selbst!) speziell

    Laden Sie das Buch "Angewandte Problemlösung" herunter

    Zum erweitern klicken ...

    Danke für diesen Hinweis, ich versuche es herauszufinden. Aber lass die Fragen erstmal hier liegen, vielleicht antwortet ja jemand.

  5. Die Plattform reagiert darauf, dass bei der zeitnahen Buchung das Datum des Belegs automatisch durch die Echtzeit der Buchung gesetzt wird.
  6. Du schwebst zu "auf der Oberfläche" - tauche tiefer ein. Wenn festgestellt wird, dass [nicht] Daten zusammenfallen – wie reagiert die Plattform in diesem oder jenem Fall?

    Und das, entschuldigen Sie, sieht im Allgemeinen nach einem fetten Trolling aus. Nun, Radchenko, die erste Erwähnung des diskutierten und ein einfaches Beispiel zu dieser Erwähnung - sofort verzweigt sich die Verarbeitung je nach Modus. Der zweite Parameter in der ProcessingConduct-Plattform, warum überträgt er Ihrer Meinung nach? Was schlagen Sie im Allgemeinen mit diesen beiden Modi vor, abgesehen von ihrer Analyse in der Verarbeitung?

    Nun, es gibt einen Code / ein Beispiel für eine Konfiguration, die zeigt / beweist, dass die Plattform (selbst!) speziell reagiert je nach Modus unterschiedlich auf dasselbe Dokument?

    Danke für diesen Hinweis, ich versuche es herauszufinden. Aber lass die Fragen erstmal hier liegen, vielleicht antwortet ja jemand.

    Zum erweitern klicken ...

    ich schweige lieber...

  7. Ich verstehe vielleicht nicht ganz, was du sagen willst.

    Ähm, warum nicht?

  8. Aber wenn wir uns streiten, dann ja, zwischen den Dokumenten (und auch deren Bewegungen, ich kann mir nicht sofort ein Beispiel für das Gegenteil vorstellen), die zeitnah und nicht zeitnah ausgeführt werden, gibt es keinen Unterschied, und der Unterschied ist nur in den Algorithmen, die der Konfigurationsentwickler bei der Analyse des aktuellen Ausführungsmodus verwendet.

    Zum erweitern klicken ...


    Sie übermitteln einen Zeitpunkt und danach erkennt das System, ob das Dokument zeitnah ausgeführt wird oder nicht.

  9. Beim Lesen von Resten aus Registern gibt es Unterschiede. Wenn Sie dies zeitnah tun, ist es egal, ob Sie die Grenze übertragen oder nicht ... die Ablesung erfolgt aus der Tabelle der für das Jahr 3999 berechneten Registerreste.
    Sie übermitteln einen Zeitpunkt und danach erkennt das System, ob das Dokument zeitnah ausgeführt wird oder nicht.

    Zum erweitern klicken ...

    Ich habe deinen Satz nicht verstanden.

    Ich sage gleich den ersten und wichtigsten Punkt: Schauen Sie, dass dort die Rückstände irgendwie so oder so gelesen werden - das ist der "Algorithmus, den der Entwickler verwendet". Und wenn ich überhaupt keine Reste in meinem Dokument zum Lesen brauche? Und was ist, wenn ich bei der Durchführung die Salden genau zu Beginn des Jahres lesen muss und egal an welchem ​​​​Datum das Dokument aufbewahrt wird? (Fragen Sie nicht warum, das ist nur ein Beispiel aus dem Himmel). Der Unterschied zwischen einem Dokument in verschiedenen Modi besteht also darin, wie der Konfigurationsentwickler darauf reagiert.

    Und den zweiten Punkt wollte ich nur für mich selbst fragen - hast du in deinem Satz von einer Art Programmcode gesprochen oder was? Ich habe es einfach nicht verstanden.

    Ach ja, dachte ich, und trotzdem werde ich mit meinem Satz besser.

    Aber wenn wir uns streiten, dann ja, zwischen den Dokumenten (und auch deren Bewegungen, ich kann mir nicht sofort ein Beispiel für das Gegenteil vorstellen), die zeitnah und nicht zeitnah ausgeführt werden, gibt es keinen Unterschied, und der Unterschied ist nur in den Algorithmen, die der Konfigurationsentwickler bei der Analyse des aktuellen Ausführungsmodus verwendet.

    Zum erweitern klicken ...

    Dies ist nicht ganz richtig.
    Sie werden weder als Entwickler noch als Endbenutzer in der Anwendungsschicht einen Unterschied in der Funktionsweise der Konfiguration feststellen. Auf körperlicher Ebene, d.h. auf der Ebene der Datensätze in der Datenbank - es wird einige Unterschiede geben. Aber auch hier sind es wahrscheinlich nicht so sehr die "operational" - "non-operational" Modi, die einen Einfluss haben, sondern das Datum des Dokuments.

  10. Und wenn ich überhaupt keine Reste in meinem Dokument zum Lesen brauche?

    Zum erweitern klicken ...

    Dies sind einige Annahmen. Die Frage war, ob es einen Unterschied im Verhalten der Plattform während der operativen oder nicht operativen Ausführung gab. Zumindest habe ich ihn so verstanden.

    Zum erweitern klicken ...

    Lesen Sie zumindest Anfang letzten Jahres. Ich sagte, dass, wenn der Moment of Time (d. h. Datum + Link) an die Parameter der virtuellen Tabelle des Akkumulationsregisters übergeben wird, die Plattform sofort feststellen wird, ob das Dokument veröffentlicht wird. Und wenn es zeitnah durchgeführt wird, werden die Daten aus der virtuellen Saldentabelle für 3999 (oder 5999 ... ich weiß es nicht mehr genau) ausgelesen.

    Und die Tatsache, dass Sie es mit Algorithmen tun, liegt bei Ihnen. In jedem Fall funktioniert die Plattform wie oben beschrieben.. Und wenn Sie Daten für den vergangenen Zeitraum benötigen, dann erhalten Sie diese nach Belieben.

  11. Ich sagte, dass, wenn der Moment of Time (d. h. Datum + Link) an die Parameter der virtuellen Tabelle des Akkumulationsregisters übergeben wird, die Plattform sofort bestimmt, ob das Dokument veröffentlicht wird. Und wenn es zeitnah durchgeführt wird, werden die Daten aus der virtuellen Saldentabelle für 3999 (oder 5999 ... ich weiß es nicht mehr genau) ausgelesen.
    Das heißt, wenn wir beispielsweise die Bewegung des Dokuments selbst aus dem Abfrageergebnis ausschließen und beispielsweise einen "Rahmen" übergeben möchten, der die Bewegung des Dokuments selbst ausschließt, dann funktioniert es nicht. Und Sie müssen zuerst die Bewegungen dieses Dokuments löschen.
    Das Verständnis dieses Mechanismus wird bei einem Plattformspezialisten überprüft und in der Vorbereitung detailliert analysiert.

    Zum erweitern klicken ...

    Es ist klar. Der Artikel von Tschistow, der sich damit beschäftigt (er scheint ihn geschrieben zu haben?) muss schon zwei Jahre her sein.
    Der 1C-Bug wird als Feature ausgegeben. Nun, tatsächlich ist es kein Fehler oder ein Feature, aber ja, es gibt so einen Moment.
    Ja, ich akzeptiere.

    Aber noch einmal, das Lesen der Residuen beim Dirigieren - ist das ein Algorithmus oder nicht?
    Ich denke, der Algorithmus. Darüber hinaus ist dies ein spezieller Algorithmus zur Kontrolle von Resten.
    UND? Wenn wir die Kontrolle der Residuen als Algorithmus entfernen, dann
    ?

Bevor ich mit der Erklärung fortfahre, möchte ich Sie daran erinnern, was in der Terminologie von 1C "halten" ist. "Ausführen" in 1C ist eine Eigenschaft von Dokumenten, die zur Eingabe in die Datenbank mit Primärinformationen über eine abgeschlossene Operation bestimmt sind. Allerdings können Informationen zum gleichen Geschäftsvorfall in unterschiedlichen Belegen angezeigt werden, sodass diese beim Anlegen eines Primärbelegs in diese aufgenommen und gespeichert werden müssen. Dieses Verfahren wird in 1C als "Dirigieren" bezeichnet.

Wenn ein unerfahrener Benutzer den Begriff "prompte Ausführung" sieht, denkt er zuerst daran, dass er mit der Geschwindigkeit der Informationsverarbeitung zusammenhängt. Diese Zuordnung ist jedoch falsch. Tatsache ist, dass es bei der "operativen" und "nicht-operativen" Ausführung dasselbe tut, nämlich Informationen über die Operation aus dem Primärdokument in andere Dokumente einträgt und dort speichert. Jedes Dokument in 1C-Programmen hat jedoch ein wichtiges Attribut - das Datum des Geschäftsvorgangs. Bei der Wahl der Betriebsart der Belegbuchung sorgen wir dafür, dass die Durchführung eines Geschäftsvorgangs sofort bzw. im nächsten Moment nach dem Vorgang erfasst wird. Bei nicht operativer Ausführung wird die Operation ab dem aktuellen Moment in der Vergangenheit registriert, auch wenn nur eine Sekunde vergangen ist.

Wenn der Benutzer den Beleg gestern "bucht", dann bestimmt das Programm selbst den Modus der nicht-operativen Buchung. Ebenso wie beim Anlegen eines neuen Dokuments wird standardmäßig der Online-Buchungsmodus verwendet. Wenn Sie jedoch den gebuchten Beleg korrigiert und sich für eine erneute Buchung entschieden haben, wird das Programm Sie sicherlich auffordern, den Buchungsmodus auszuwählen.

In den meisten Fällen benötigt der Benutzer diese Informationen nicht, es gibt jedoch einige Momente, in denen das Verständnis der Verhaltensweisen nicht schaden kann.

Zunächst ist zu beachten, dass ein zeitnah gebuchter Beleg nicht mit einem zukünftigen Datum gebucht werden kann. Das Programm gibt in diesem Fall einen Fehler aus. Nehmen Sie zum Beispiel eine Eingangsbestellung. Es versteht sich von selbst, dass Sie heute nicht wissen, wie viel Geld morgen an der Kasse ankommt. Dies erfahren Sie erst nach Abschluss des Vorgangs, wenn der Kassierer das Geld in die Hand nimmt und den Beleg hält.

Der zweite wichtige Punkt. Ausgehend von der Art der Buchung von Belegen in Standardprogrammen (insbesondere für den Handel: und 1C: Manufacturing Enterprise Management 8 ()) haben die Entwickler Funktionen zur Steuerung verschiedener Konflikte implementiert. Zum Beispiel die Kontrolle der Angemessenheit des Lagerbestands an Waren für den Verkauf.

Diese Kontrollen basieren auf dem Verständnis, dass ein sofort ausgeführtes Dokument keine zukünftige Operation widerspiegeln kann, was bedeutet, dass es das relevanteste aller ähnlichen Dokumente ist. Daher verbindet das Programm bei der operativen Buchung eines Belegs verschiedenste Kontrollmodule, die die zuvor eingegebenen Informationen als Grundlage verwenden. Wenn der Benutzer die nicht operative Ausführung wählt, informiert dies das System wissentlich, dass dieses Dokument höchstwahrscheinlich nicht das neueste ist, daher ist es einfach unangemessen, viele Steuerfunktionen zu verwenden. Durch die Auswahl einer nicht operativen Belegbuchung deaktiviert der Benutzer die im Programm implementierte Kontrolle, was zu einigen späteren Fehlern in der Arbeit führen kann. So funktionierte beispielsweise die Kontrolle der Verfügbarkeit ausreichender Mengen im Lager nicht und der Betreiber verkaufte, was nicht mehr da war.

In diesem Zusammenhang empfehlen die Entwickler, den nicht-operativen Modus des Dirigierens nur dann zu verwenden, wenn der Benutzer sich der Richtigkeit des Ergebnisses sicher ist.

Unterscheiden Sie zwischen operativen und nicht operativen Dokumenten; die Möglichkeit der nicht operativen Buchung wird durch die entsprechende Option in den Belegeinstellungen geregelt:

Promptes Verhalten- Dies ist die Buchung des Belegs nach aktuellem Datum und Uhrzeit. Auch wenn Sie manuell eine vergangene oder zukünftige Uhrzeit und ein Datum in ein Dokument eingeben, wird es trotzdem online gestellt. Dies ist notwendig, da das System im Online-Modus die Salden der Kassen überwacht, damit diese nicht in den negativen Bereich gehen können. Eine solche Kontrolle macht nur im Moment Sinn, da auch eine Sekunde früher oder eine Sekunde später kann der Zustand der Basis bereits anders sein als im Moment des tatsächlichen Verhaltens.

Nicht-operatives Verhalten- Buchen des Belegs zu einem vergangenen oder zukünftigen Datum. Weil Kontrolle der Salden bei "rückwirkender" Abwicklung macht keinen praktischen Sinn, die Ware wurde ohnehin schon versendet, bei dieser Abwicklung wird sie nicht durchgeführt.

Fehlverhalten kann gegen die Chargenabrechnung verstoßen: Bei einer nachträglichen Abbuchung aus dem Lager wird die erste passende Charge abgeschrieben und nicht diejenige, die zum im Beleg angegebenen Zeitpunkt laut FIFO gehen sollte. Danach müssen die Parteien wiederhergestellt werden.

Frage 01.50 der Prüfung 1C: Professional auf der Plattform. Unter welchen Bedingungen ist es notwendig, die Eigenschaft "Sofortbuchung" eines Dokuments auf "Ablehnen" zu setzen?

  1. Wenn das Dokument durch das Verhalten in Echtzeit (gegenwärtig) geleitet wird.
  2. Wenn das Dokument auf das Futur ausgerichtet ist
Die richtige Antwort ist die vierte. Soll der Beleg immer mit einem zukünftigen Datum gebucht werden, dann ist hier definitiv keine zeitnahe Buchung erforderlich.

Frage 01.51 der Prüfung 1C: Professional auf der Plattform. Unter welchen Bedingungen ist es notwendig, die Eigenschaft "Sofortbuchung" eines Dokuments auf "Zulassen" zu setzen?

  1. Wenn das Dokument durch das Verhalten in Echtzeit (gegenwärtig) geleitet wird.
  2. Wann der Beleg gebucht wird, hängt nicht vom Zeitpunkt seiner Registrierung ab.
  3. Wenn das Dokument von der Vergangenheitsform ("Rückblick") geleitet wird.
  4. Wenn das Dokument auf das Futur ausgerichtet ist.
Die richtige Antwort ist die erste, siehe oben.

Frage 12.10 der Prüfung 1C: Profi auf der Plattform. Die Betriebsart der Belegbuchung wird verwendet:

  1. Nur beim Arbeiten mit Informationsregistern
  2. Nur bei Arbeiten mit Akkumulationsregistern
  3. Nur bei der Arbeit mit Buchhaltungsregistern
  4. Nur beim Arbeiten mit Rechenregistern
  5. Unabhängig von der Art des Registers

Die richtige Antwort ist die fünfte. Unabhängig von der Art des Registers müssen Sie den Stand zum Zeitpunkt der Aufzeichnungen berücksichtigen oder nicht berücksichtigen.

Frage 12.54 der Prüfung 1C: Professional auf der Plattform.

Die richtige Antwort ist die erste, alles ist aus dem Screenshot ersichtlich.

Frage 12.55 der Prüfung 1C: Professional auf der Plattform. Beschreiben Sie die Aktionen des Systems, wenn Sie versuchen, einen Beleg zu buchen?

  1. Das System wird die Buchung des Belegs verweigern, weil operatives Verhalten ist dafür erlaubt, und das Datum ist größer als das aktuelle Datum
  2. Das System wird den Beleg nur zum gewünschten Datum schreiben, aber nicht buchen, weil operatives Verhalten ist dafür erlaubt, und das Datum ist größer als das aktuelle Datum
  3. Das System fragt nach dem Buchungsmodus ("Operational", "Non-Operational") und verbucht, je nach Wahl des Benutzers, den Beleg
  4. Das System wird das Dokument zweifellos in einem nicht betriebsbereiten Modus halten, da promptes Buchen ist dafür erlaubt und das Datum des Belegs ist größer als das aktuelle Datum

Die richtige Antwort ist die erste. Die Betriebshaltung hält bis zum aktuellen Datum/Uhrzeit.

Frage 12.56 der Prüfung 1C: Professional auf der Plattform. Beschreiben Sie die Aktionen des Systems, wenn Sie versuchen, einen Beleg zu buchen?

  1. Das System wird das Dokument zweifellos online halten, weil es darf zeitnah durchgeführt werden, wurde aber nicht gebucht und das Datum entspricht dem aktuellen Datum (tagesgenau)
  2. Das System wird die Buchung des Belegs verweigern, weil operatives Verhalten ist ihm erlaubt und der Termin ist größer als der Arbeitstermin
  3. Das System wird das Dokument zweifellos in einem nicht betriebsbereiten Modus halten, da promptes Buchen ist dafür erlaubt und das Datum des Belegs ist kleiner als das aktuelle Datum (sekundengenau)
  4. Das System fragt nach dem Buchungsmodus ("Operational", "Non-Operational") und verbucht, je nach Wahl des Benutzers, den Beleg

Die richtige Antwort ist die erste. Die Einträge werden mit dem aktuellen Datum/Uhrzeit vorgenommen.

Frage 12.60 der Prüfung 1C: Professional auf der Plattform. Beschreiben Sie die Aktionen des Systems, wenn Sie versuchen, einen Beleg zu buchen?

  1. Weil für einen Beleg ist eine prompte Buchung erlaubt, er ist gebucht und das Datum entspricht dem aktuellen Datum (tagesgenau), das System fragt nach dem Buchungsmodus ("Operational", "Non-Operational") und , je nach Wahl des Benutzers, wird das Dokument veröffentlichen
  2. Das System wird die Buchung des Belegs verweigern, weil operatives Verhalten ist dafür erlaubt und das Datum ist größer als das Arbeitsdatum
  3. Das System wird das Dokument zweifellos in einem nicht betriebsbereiten Modus halten, da promptes Buchen ist dafür erlaubt und das Datum des Belegs ist kleiner als das aktuelle Datum (sekundengenau)
  4. Das System wird das Dokument zweifellos online halten, weil es darf zeitnah durchgeführt werden und das Datum entspricht dem aktuellen Datum (tagesgenau)
Die richtige Antwort ist die erste - da der Beleg bereits gebucht wurde, muss das System wissen, welche Zeit der Beleg benötigt - die aktuelle Uhrzeit oder die Uhrzeit des Belegs.

Frage 12.63 der Prüfung 1C: Professional auf der Plattform. Beschreiben Sie die Aktionen des Systems, wenn Sie versuchen, einen Beleg zu buchen?

  1. Das System fordert eine Bestätigung der Belegbuchung im nicht-operativen Modus oder den Abbruch der Aktion an, weil es darf zeitnah durchgeführt werden, es wurde nicht gebucht und das Datum ist kleiner als das aktuelle Datum
  2. Das System wird die Buchung des Belegs verweigern, weil operatives Verhalten ist dafür erlaubt und das Datum ist größer als das Arbeitsdatum
  3. Das System wird das Dokument zweifellos in einem nicht betriebsbereiten Modus halten, da promptes Buchen ist dafür erlaubt und das Belegdatum ist kleiner als das aktuelle Datum
  4. Das System fragt nach dem Buchungsmodus ("Operational", "Non-Operational") und verbucht, je nach Wahl des Benutzers, den Beleg
Die richtige Antwort ist die erste. Eine schnelle Umbuchung ist nicht möglich, die Bewegungen sind bereits angelegt.

Frage 12.66 der Prüfung 1C: Professional auf der Plattform. Beschreiben Sie die Aktionen des Systems, wenn Sie versuchen, einen Beleg zu buchen?

  1. Das System wird das Dokument zweifellos in einem nicht betriebsbereiten Modus halten, da operatives Verhalten ist dafür erlaubt, es wurde gebucht und das Datum ist kleiner als das aktuelle Datum
  2. Das System wird die Buchung des Belegs verweigern, weil operatives Verhalten ist dafür erlaubt und das Datum ist größer als das Arbeitsdatum
  3. Das System wird die Buchung des Belegs verweigern, weil es darf zeitnah durchgeführt werden und das Datum ist kleiner als das aktuelle Datum
  4. Das System fordert eine Bestätigung der Belegbuchung im nicht-operativen Modus oder den Abbruch der Aktion an, weil es darf zeitnah durchgeführt werden und das Datum ist kleiner als das aktuelle Datum
  5. Das System fragt nach dem Buchungsmodus ("Operational", "Non-Operational") und verbucht, je nach Wahl des Benutzers, den Beleg
Erste Antwort.

Frage 12.57 der Prüfung 1C: Professional auf der Plattform. Welche Domänenbedingungen können die Einstellung der Eigenschaft "Online-Buchung" eines Dokuments auf "Zulassen" beeinflussen?

  1. Wenn das Dokument auf die Echtzeit-(Gegenwarts-)Zeit ausgerichtet ist
  2. Wenn die Buchung des Belegs nicht vom Zeitpunkt seiner Registrierung abhängt
  3. Wenn das Dokument von der Vergangenheitsform geleitet wird ("Rückblick")
  4. Wenn das Dokument auf das Futur ausgerichtet ist

Die richtige Antwort ist die erste, siehe den Beitrag zum Online-Modus.

Frage 12.58 der Prüfung 1C: Professional auf der Plattform. In welchen Modi kann ein Beleg gebucht werden, wenn die Eigenschaft "Online-Buchung" auf "Deaktivieren" gesetzt ist?

  1. Nur im Modus „Nicht betriebsbereit“
  2. Nur im Modus "Operational"
  3. Sowohl im "Operational"- als auch im "Non-Operational"-Modus

Die richtige Antwort ist offensichtlich die erste.

Frage 12.59 der Prüfung 1C: Professional auf der Plattform. In welchen Modi kann ein Beleg gebucht werden, wenn die Eigenschaft "Online-Buchung" auf "Zulassen" gesetzt ist?

  1. Sowohl im Modus „Operational“ als auch im Modus „Non-Operational“
  2. Nur im Modus "Operational"
  3. Nur im Modus „Nicht betriebsbereit“

Erste Wahl.

Frage 12.65 der Prüfung 1C: Professional auf der Plattform. In welchen Modi kann ein Beleg gebucht werden, wenn die Eigenschaft "Online-Buchung" auf "Deaktivieren" gesetzt ist?

  1. Kann in der Vergangenheit gehalten werden
  2. Kann in Zukunft stattfinden
  3. Kann in der aktuellen Periode durchgeführt werden
  4. Option 1 und 2 sind richtig
  5. Option 1 und 3 sind richtig
  6. Optionen 1, 2 und 3 sind richtig

Die sechste richtige Antwort, nicht operatives Verhalten, beinhaltet die Durchführung zu jedem notwendigen Zeitpunkt.

Frage 12.67 der Prüfung 1C: Professional auf der Plattform. Wenn der Beleg erneut im Register gebucht wird:

  1. Der alte Datensatz wird immer automatisch gelöscht und an seiner Stelle ein neuer geschrieben.
  2. Die Menge der Einträge im Register bleibt unverändert
  3. Das Recordset-Verhalten wird vom Entwickler im Konfigurator durch Einstellungen und Programmcode definiert
  4. Das Verhalten eines Satzes von Datensätzen wird vom Benutzer in Abhängigkeit vom gewählten Buchungsmodus (operativ oder nicht operativ) definiert.

Die richtige Antwort ist die erste, der Satz von Datensätzen kann für die erste / zweite Buchung des Belegs unterschiedlich programmiert werden.

Frage 12.68 der Prüfung 1C: Professional auf der Plattform. Wenn im Konfigurator der Modus "Online aktivieren" aktiviert ist?

  1. Der Beleg kann mit aktuellem Datum und aktueller Uhrzeit gebucht werden
  2. Der Beleg kann mit jedem beliebigen Datum gebucht werden
  3. Der Beleg kann entweder mit dem vorherigen Datum oder mit dem aktuellen Datum und der aktuellen Uhrzeit gebucht werden

Die dritte Antwort ist richtig. Bis zum vorherigen Datum wird der Beleg außer Betrieb gebucht.

Frage 12.73 der Prüfung 1C: Professional auf der Plattform. In welchen Modi kann ein Beleg gebucht werden, wenn die Eigenschaft "Online-Buchung" auf "Deaktivieren" gesetzt ist?

  1. Beim Buchen eines Dokuments als Registrar muss das Recordset auf das aktuelle Dokument referenziert werden
  2. Beim Veröffentlichen eines Dokuments als Registrar muss das Recordset auf ein beliebiges Dokument verweisen, aber alle Datensätze im Set müssen denselben Registrar haben
  3. Bei operativem Verhalten des Registrars muss das Set einen Link zum aktuellen Dokument enthalten, bei nicht operativem kann ein Link zu einem beliebigen Dokument vorhanden sein

Die richtige Antwort ist die zweite (es ist nicht ganz klar, wie dies mit der Leitungsart zusammenhängt).


Für diejenigen, die mit 1C-Konfigurationen gearbeitet haben, in denen die Betriebsbuchhaltung geführt wird, ist die in der Abbildung gezeigte Form höchstwahrscheinlich bekannt. Das Dokument wird heute aufbewahrt, und das 1C-Programm bietet 2 Optionen zum Halten dieses Dokuments. Betrachten wir, was diese Modi der Belegbuchung bedeuten ...

Wo wird es angewendet?

  • 1C: Handelsverwaltung 10,3
  • 1C: Management des Fertigungsunternehmens 1.3
  • 1C: Integrierte Automatisierung 1.1

Sofortige Ausführung des 1C-Dokuments

  • Nur Belege für heute können zeitnah gebucht werden.
  • Die sofortige Buchung eines 1C-Belegs wird zum aktuellen Zeitpunkt durchgeführt. Auch wenn der Beleg heute, vor wenigen Stunden, mit der zeitnahen Buchung dieses Belegs erstellt wurde, ändert sich die Uhrzeit dieses Belegs auf den aktuellen.
  • Bei der Online-Ausführung wird in den meisten Konfigurationen auf das Vorhandensein von Rückständen geprüft. Ist beispielsweise kein Saldo im Lager vorhanden, wird der Verkaufsbeleg nicht gebucht.
  • Es ist unmöglich, einen Beleg mit einem zukünftigen Datum schnell zu buchen.

Nicht funktionsfähige Buchung des 1C-Belegs

  • Außerbetrieblich können Sie einen Beleg für ein beliebiges Datum buchen, wobei sich Datum und Uhrzeit des Belegs nicht ändern.
  • Bei nicht operativem Verhalten dürfen die Rückstände nicht kontrolliert werden. Beispielsweise wird ein Beleg gebucht, gleichzeitig aber eine Meldung über das Fehlen von Waren im Lager ausgegeben.

Für Implementierer, die mit Standard- oder eigenen Konfigurationen arbeiten – und solche, die sich auf die Attestation auf 1C vorbereiten: Plattformspezialist.

In diesem Artikel analysieren wir:

  • wie Verwaltete Sperren richtig verwenden bei fristgerechter und nicht fristgerechter Ausführung von Dokumenten
  • zu was kann es führen keine Blockierung
  • wie man Fehler nicht macht, die nicht sofort entdeckt werden und schwerwiegende Folgen haben können :)

Lesezeit - 20 Minuten.

Also, zwei Methoden zur Kontrolle von Rückständen in 1C: Enterprise 8.3

Beginnen wir damit, dass die Bezeichnungen "alte Methode" und "neue Methode" eher willkürlich sind. In der Tat, wenn die „neue Technik“ seit 2010 verwendet wird, ist sie nicht mehr sehr neu :)

Allerdings sind wir hier wieder einmal gezwungen aufzuhören, denn zwischen diesen Ansätzen zu unterscheiden ist notwendig und entscheidend.

Die „alte Methode“ ist ein Ansatz zur Reststoffkontrolle, der seit den Tagen von „1C: Enterprise 8.0“ angewendet wird.

Seit 2010 wird mit der Entwicklung der Plattform und dem Hinzufügen neuer Funktionen aus "1C: Enterprise 8.2" eine "neue Methodik" angewendet ( aber - nicht überall).

Was ist der Unterschied?

Der grundlegende Unterschied liegt im Moment der Kontrolle über die Salden:

  • Bei der „alten“ Methode werden die Residuen kontrolliert, BEVOR die Bewegungen in den Registern aufgezeichnet werden.
    Zuerst prüfen wir die Salden, wenn die Salden „nicht ausreichend“ sind (negative Salden werden angezeigt) - wir werden den Beleg nicht buchen
  • Bei der „neuen“ Methode erfolgt die Kontrolle NACH der Aufzeichnung der Bewegungen, also nachträglich.
    Wenn sich nach der Buchung negative Salden gebildet haben, müssen Sie die Transaktion "zurücksetzen", dh die Buchung des Belegs stornieren.

Die Vor- und Nachteile der neuen Technik werden ausführlich in einem separaten Artikel offengelegt, daher beschränken wir uns auf eine allgemeine These - die neue Technik ist hinsichtlich Leistung und Skalierbarkeit optimaler.

Ok, die alte Technik gehört also der Vergangenheit an und das ist das Los von UT 10.3?

Nein, das stimmt nicht ganz.

Die neue Technik kann beim Abschreiben von Waren verwendet werden alle notwendigen Daten sind im Dokument enthalten und müssen nicht berechnet werden.

Zum Beispiel, wenn die abzuschreibende Menge aus dem tabellarischen Teil des Belegs bekannt ist. Das Problem entsteht bei den Kosten, da diese vor dem Schreiben in das Register berechnet werden müssen, dh um eine Abfrage an die Datenbank auszuführen.

Daher kann die neue Technik erfolgreich angewendet werden, wenn die Daten zu Menge und Kosten in getrennten Registern gespeichert werden.

Zum Beispiel so:

Es gibt jedoch Konfigurationen, bei denen sowohl Menge als auch Kosten im selben Register erfasst werden. Und hier ist etwas Berechtigtes die alte Methode der Rückstandskontrolle funktioniert weiterhin!

Hier ist ein Beispiel für ein Ledger für Menge und Kosten:

Wie sieht es mit typischen Konfigurationen aus? Es gibt nur eine neue Technik, oder?

Nicht immer!

In "1C: Trade Management 11.3" gibt es beispielsweise 2 Register:

Bei der Buchung von Versandbelegen wird das Register "Warenkosten" überhaupt nicht ausgefüllt. Daten in diesem Register werden nur bei Routinevorgängen zum Monatsabschluss abgerufen.

UT 11 verwendet eine neue Technik, da alle Daten für die Buchung von Belegen ohne Zugriff auf kontrollierte Register abgerufen werden können.

Wie bei "1C: Accounting" werden dort sowohl die Menge als auch die Kosten gespeichert. in einem Register Rechnungswesen, auf den entsprechenden Konten der BU.

Deshalb BP 3.0 verwendet die alte Technik.

Bitte beachten Sie, dass die quantitative und wertmäßige Abrechnung in UT 11 mit unterschiedlichen Analytiken durchgeführt wird. Beispielsweise werden die Kosten zusätzlich im Kontext der Organisation, Abteilung, des Managers, der Umsatzsteueraktivitäten usw. geführt.

Im Rahmen des aktuellen Artikels werden wir die Sperren sowohl für die alte als auch für die neue Methode der Saldenkontrolle analysieren.

Über die zeitnahe Ausführung von Dokumenten

Bei dieser einfachen Frage gibt es oft Missverständnisse.

Manchmal wird angenommen, dass eine sofortige Leistung die Kontrolle von Rückständen unter Verwendung eines neuen Verfahrens ist. Dies ist nicht so, vom Wort "absolut".

Die Betriebsleistung kann während der Überwachung von Residuen analysiert werden, ist aber nicht erforderlich.

Promptes Verhalten- Dies ist die Fähigkeit eines Dokuments, aufkommende Ereignisse hier und jetzt, dh in Echtzeit, zu registrieren.

Es wird über eine spezielle Dokumenteigenschaft konfiguriert:

Was bedeutet „hier und jetzt registrieren“? Die Plattform für zeitnah ausgeführte Dokumente führt eine Reihe von Aktionen aus:

  • Den heutigen Dokumenten wird die aktuelle Uhrzeit zugeordnet.
  • Wenn zwei Belege gleichzeitig gebucht werden, hat jeder seine eigene Zeit (d.h. das System bucht die Belege in unterschiedlichen Sekunden)
  • Belege können nicht zu einem späteren Zeitpunkt gebucht werden.

Aber die Hauptsache ist anders – das System sendet Zeichen der Effizienz Dokument zur Bearbeitung:

Bei zeitnah gebuchten Belegen können Sie den Parameter in der Anforderung weglassen, Sie erhalten die aktuellen Salden zum 31.12.399:

Tatsächliche Salden werden im System gespeichert und schnellstmöglich empfangen (Salden zu anderen Terminen werden in den meisten Fällen durch Berechnung ermittelt).

Auf diese Weise Sowohl bei der alten als auch bei der neuen Rückstandskontrollmethodik kann ein zeitnahes Verhalten angenommen werden.

Interessante Tatsache.

In UT 11 ist die sofortige Ausführung von Dokumenten, die die Nomenklatur abschreiben, verboten. Dies sind beispielsweise die Dokumente "Verkauf von Waren und Dienstleistungen", "Montagewaren", "Warenverkehr", "Innerer Warenverbrauch" und andere.

Warum wird das gemacht?

Im System wird die Saldenkontrolle immer zum aktuellen Zeitpunkt durchgeführt (der Parameter Periode ist in der Anfrage nicht angegeben). Und das Fehlen einer zeitnahen Buchung ermöglicht es Ihnen, Dokumente mit einem zukünftigen Datum einzugeben, eine solche Aufgabe wird oft von Kunden verlangt.

Kontrolle von Rückständen mit einer neuen Methode - keine Verstopfungen

Betrachten wir kurz den Algorithmus zur Kontrolle der Salden bei der Durchführung des Dokuments "Verkauf von Waren und Dienstleistungen" an einer Modellkonfiguration.

Es gibt zwei Register:

  • Kostenlose Salden - für die quantitative Bilanzierung
  • Warenkosten - für die Kostenrechnung

Um die Warensalden zu kontrollieren, genügt es, mit dem Register "Freie Salden" zu arbeiten.

Der Verarbeitungscode für die Transaktion sieht wie folgt aus:

Anfrage = Neue Anfrage;


# Region Region1
Request.TempTablesManager = NewTempTablesManager;
#EndRegion


# Region Region2
Anfrage.Text =
"AUSWÄHLEN

| POST-ProdukteDokument
| VON
| WO
|
| LADEN VON
|
| INDEX VON
| Nomenklatur
|;

| WÄHLEN
| & Datum AS-Periode,
| WERT (Bewegungsart, Akkumulation, Fluss) ALS Bewegungsart,
| ProdukteDocument.Quantity AS Menge
| VON
";
Request.SetParameter ("Datum", Datum);
#EndRegion

// 4. Aufzeichnung von Bewegungen in der Datenbank
# Region Region4
Bewegungen.Schreiben ();
#EndRegion


# Region Region5
Anfrage.Text =
"AUSWÄHLEN
| -Kostenlose Salden Balances.Quantity Balance AS Deficit
| VON
| ProdukteDokument AS ProdukteDokument
| INTERNE VERBINDUNG Akkumulationsregister.Freie Salden.Rest (
| &Zeitpunkt,
| Nomenklatur B
| (AUSWÄHLEN
| Dokumentprodukte.Nomenklatur AS-Nomenklatur
| VON
| Produkte dokumentieren AS Produkte dokumentieren)) AS Freisalden
| ON GoodsDocument.Nomenclature = Free BalancesBalances.Nomenclature
| WO
| Freie Reste Reste.Verbleibende Menge< 0";
#EndRegion


# Region Region6
Kontrollmoment bleibt =
? (Modus = DocumentPost Mode.Operative,
Nicht definiert,
Neuer Rahmen (Zeitstempel (), BorderView.Including));
Request.SetParameter ("Zeitpunkt", Moment der verbleibenden Kontrolle);
Abfrageergebnis = Abfrage.Run ();
#EndRegion


# Region Region7
Wenn NICHT QueryResult.Empty () Then
Ablehnung = wahr;
ErrorFetch = QueryResult.Select ();
Während FetchingErrors.Next () Schleife
Message.Text = "Nicht genügend Produkt in Menge:" + SelectionErrors.Large;
Message.Field = "Produkte [" + (ErrorSelection.LineNumber-1) + "]. Menge";
Nachricht.Informieren ();
Ende des Zyklus;
EndIf;
#EndRegion


# Region Region8
Wenn Fehler dann
Zurückkehren;
EndIf;
#EndRegion

Ende des Verfahrens

Betrachten wir die wichtigsten Punkte des Residuensteuerungsalgorithmus.

1. Initialisierung des temporären Tabellenmanagers

Der Manager wird benötigt, damit die in der Abfrage erstellte temporäre Tabelle auch in den folgenden Abfragen verfügbar ist.

Somit werden die Daten des tabellarischen Abschnitts einmal erhalten, in einer temporären Tabelle gespeichert und dann wiederholt verwendet.

2. Tabellenabschnittsdaten gruppieren

Die Abfrage wählt die gruppierten Daten des tabellarischen Abschnitts aus.

Beachten Sie, dass auch die Belegzeilennummer ausgewählt ist - sie wird für die kontextbezogene Bindung der Fehlermeldung benötigt. Für die Zeilennummer wird die Aggregatfunktion MINIMUM() verwendet, dh die Nachricht wird an die erste Zeile angehängt, in der das angegebene Element gefunden wird.

Die erste Anforderung des Pakets erstellt eine temporäre Tabelle. Die zweite Abfrage wählt die Daten der temporären Tabelle aus und fügt 2 Felder hinzu, die für jeden Registersatz erforderlich sind - Periode und Bewegungsart.

Die Vorteile dieses Ansatzes:

  • Keine Vorreinigung erforderlich, d. h. die Methode Clear () verwenden
  • Es ist nicht erforderlich, eine Auswahl oder einen tabellarischen Abschnitt zu durchlaufen.

Ein ähnlicher Ansatz wird übrigens in typischen Konfigurationen verwendet, insbesondere in UT 11 und BP 3.0.

4. Aufzeichnung von Bewegungen in der Datenbank

Die Aufnahme könnte mit einem Befehl (anstelle von zwei) erfolgen - Movements.Free Remains.Write ().

Und in unserem Fall wird es keinen Unterschied geben, wenn ein Register geschrieben wird.

Aber dieser Ansatz ist universeller:

  • Setzen Sie zuerst das Write-Flag auf den erforderlichen Sätzen von Registersätzen
  • Rufen Sie dann die Write()-Methode der Movement-Sammlung auf, die alle Sets mit dem Write-Flag gesetzt in die Datenbank schreibt

Nach Ausführung des Befehls "Movements. Write ()" wird das Write-Flag für alle Sets auf False zurückgesetzt.

Denken Sie auch daran, dass das System am Ende einer Transaktion (nach dem Buchen) automatisch nur die Datensätze in die Datenbank schreibt, für die das Flag Schreiben auf True gesetzt ist.

Typische Lösungen verwenden ein ähnliches Schema, um Bewegungen aufzuzeichnen. Wieso den?

Die Methode Record() der Motion-Sammlung zeichnet Datensätze in derselben Reihenfolge auf, sogar für unterschiedliche Dokumente.

Das manuelle Aufzeichnen von Bewegungen kann zu Problemen führen.

Geben wir ein Beispiel.

Wenn im Dokument "Implementierung" wie folgt geschrieben wird:

Bewegung.FreeRemains.Write ();
...
Bewegungen.Kostenpreis der Ware.Write ();

Und im Dokument "Warenbewegung" die Reihenfolge ändern:

Bewegung. Warenkosten.Schreiben ();
...
Bewegung. Frei bleibt.Schreiben ();

Dies kann zu einem Blockieren von Dokumenten auf überlappenden Elementsätzen führen.

Der obige Ansatz zur Aufzeichnung von Bewegungen kann verwendet werden, wenn in den Dokumenteigenschaften der entsprechende Wert für die Aufzeichnung von Bewegungen angegeben ist:

5. Fordern Sie einen negativen Saldo an

Die Anforderung wählt negative Bestandssalden aus dem Beleg aus.

Der negative Saldo ist der Mangel (Defizit) der Ware.

Die Verbindung mit den Positionen aus dem Beleg wird nur durchgeführt, um die Zeilennummer zu erhalten.

Wenn wir nicht geplant haben, Nachrichten an Dokumentfelder zu binden, kann die Abfrage stark vereinfacht werden - die Daten werden aus einer Tabelle (dem Rest des Registers) bezogen.

6. Bestimmung des Zeitpunkts für die Reststoffkontrolle

Hier hat sich die prompte Umsetzung bewährt.

Wird der Beleg zeitnah gebucht, ist der Zeitpunkt für den Saldeneingang undefiniert, d. h. den Erhalt der Istsalden.

Wenn dies ein nicht operatives Verhalten ist, dann bekommen wir einen Moment "nach" dem Dokument - um die gerade gemachten Bewegungen zu berücksichtigen.

Denken Sie daran, dass das Abrufen der aktuellen Residuen im Vergleich zum Abrufen der Residuen zu einem beliebigen Zeitpunkt eine schnelle Operation ist.

Genau dies ist der Vorteil zeitnah ausgeführter Dokumente.

7. Wenn die Anfrage nicht leer ist, haben sich negative Salden gebildet

In der Schleife gehen wir alle negativen Residuen durch und zeigen die Meldung des an die Zeilen angehängten tabellarischen Abschnitts an.

So sieht die Diagnosemeldung aus:

8. Bei Fehlern kehren wir vom Eventhandler zurück

Wenn mindestens ein Fehler aufgetreten ist, beenden Sie die Prozedur.

Da es keinen Sinn macht weiterzumachen, wird die Transaktion trotzdem nicht protokolliert (und dann entwickeln wir einen Code zum Abschreiben von Losen).

Durchführung der Kostenabschreibung nach Los

Nachdem die Saldenprüfung erfolgreich war, können Sie die Lose abschreiben.

Der Code zum Abschreiben durch FIFO sieht wie folgt aus:

// I. Analyse der Vorwärtsverschiebung des Belegdatums


UND NICHT ThisObject.ThisNew ()
Und dieses Objekt. Damals gehalten

Anfrage = Neue Anfrage;
Anfrage.Text =
"AUSWÄHLEN
| Dokument.Datum AS Datum
| VON
| WO

Abfrageergebnis = Abfrage.Run ();
FetchDocument.Next();

Andernfalls
Lüge);
EndIf;

Ende des Verfahrens

Verfahren aktenkundig (Haftungsausschluss)

ThisObject.AdditionalProperties.Insert ("DocumentDate ShiftedForward",
DiesesObjekt.Datum>


EndIf;

Ende des Verfahrens

Ablauf der Buchungsbearbeitung (Ablehnung, Modus)

Anfrage = Neue Anfrage;

// 1. Initialisierung des temporären Tabellenmanagers
# Region Region1
...
#EndRegion

// 2. Abfrage, die die Daten des tabellarischen Abschnitts gruppiert
# Region Region2
...
#EndRegion

// 4. Aufzeichnung von Bewegungen in der Datenbank
# Region Region4
...
#EndRegion

// 5. Antrag auf Erhalt negativer Salden
# Region Region5
...
#EndRegion

// 6. Bestimmung des Zeitpunkts zur Kontrolle der Residuen
# Region Region6
...
#EndRegion

// 7. Wenn die Anfrage nicht leer ist, haben sich negative Residuen gebildet
# Region Region7
...
#EndRegion

// 8. Wenn Fehler auftreten, dann Rückkehr vom Event-Handler
# Region Region8
...
#EndRegion

//II. Erstellung von Aufzeichnungen des Registers "Warenkosten"
# Bereich Bereich II

Bewegungen.Schreiben ();
EndIf;
Bewegungen.Einstandspreis der Ware.Record = True;
#EndRegion

// III. Beantragen Sie den Erhalt des Saldos der Chargen zur Abschreibung durch FIFO
# Region RegionIII
Anfrage.Text =
"AUSWÄHLEN
| ProduktDokument.Nomenklatur AS-Nomenklatur,
| ProduktDocument.LineNumber AS LineNumber,

| Bleibt Party AS Party
| VON
| ProdukteDokument AS ProdukteDokument
| &Zeitpunkt,
| Nomenklatur B
| (AUSWÄHLEN
| VON

| BESTELLEN NACH
| ERGEBNISSE
| MAXIMUM (Menge),
| BETRAG (Restbetrag)
| Software
| Nomenklatur";
Abfrageergebnis = Abfrage.Run ();
#EndRegion

// NS. Durch die Dokumentnomenklatur blättern
# Region RegionIV

// V. Holen Sie sich den abzuschreibenden Betrag
// VI. FIFO-Chargenzyklus
Während SamplePart.Next () And RemainingWrite> 0 Loop
//VII. Auf Null Rest prüfen
IfSamplePart.QuantityRemains = 0 Then
Fortfahren;
EndIf;
Bewegung.Periode = Datum;

//VIII. Berechnung der zu belastenden Menge und des zu belastenden Betrages

// IX. Reduzieren wir den abzuschreibenden Betrag
Ende des Zyklus;
Ende des Zyklus;
#EndRegion

Ende des Verfahrens

Lassen Sie uns die wichtigsten Punkte des Algorithmus zum Abschreiben von Losen durch FIFO analysieren.

I. Analyse der Vorwärtsverschiebung des Belegdatums

Hier verstehen wir, ob sich das Datum des gebuchten Belegs nach vorne verschiebt. Diese Informationen sind unten beim Löschen von Bewegungen nützlich.

Um die Verschiebung des Datums des Dokuments zu analysieren, sind 2 Ereignisse erforderlich:

  • Vor der Aufnahme- um das alte Datum des Belegs zu erhalten und den Modus der Belegbuchung zu überprüfen
  • Beim Aufnehmen- um ein neues Dokumentdatum zu erhalten

Wir übertragen Daten zwischen Ereignissen durch eine spezielle Sammlung des Objekts - "AdditionalProperties". Es existiert so lange, wie sich die aktuelle Version des Objekts im Speicher befindet, dh es steht für alle Ereignisse während der Ausführung zur Verfügung.

Eine ähnliche Technik wird im typischen "1C: Accounting 8" verwendet. Es wird jedoch ein Ereignis "Vor der Aufnahme" verwendet.

Warum ist es nicht notwendig, "Beim Aufnehmen" im Netzteil zu verwenden?

Ganz einfach - Versandpapiere in der Buchhaltung können nicht zeitnah erstellt werden. Dies bedeutet, dass die Uhrzeit des Dokuments keine Betriebsmarkierung akzeptiert (wenn das Dokument am aktuellen Tag neu gebucht wird), daher können sowohl das alte als auch das neue Datum des Dokuments im Ereignis "Vor der Erfassung" abgerufen werden.

II. Erstellung von Aufzeichnungen des Registers "Warenkosten"

Für das Dokument ist der Bewegungslöschmodus eingestellt - „Beim Stornieren der Buchung“:

Daher besteht die Möglichkeit, dass wir beim Umbuchen die Bewegungen des Belegs selbst berücksichtigen können. ABER dies geschieht nur, wenn das Dokumentdatum nach vorne verschoben wird. Das heißt, es ist sinnvoll, Bewegungen nur dann zu bereinigen, wenn das Belegdatum nach vorne verschoben wird.

Geben wir ein Beispiel:

  • Verbleibende Monitore LG zum Zeitpunkt der Unterlagen - 10 Stck.
  • Es wird ein Beleg gebucht, der 8 Stück abschreibt.
  • Im selben Dokument wird die Zeit um 1 Minute erhöht, wir werden neu posten

Wenn keine Altbewegungen gelöscht werden, meldet das System einen Mangel an 6 Monitoren, da die aktuellen Belegbewegungen bereits von 8 von 10 verfügbaren Monitoren abgeschrieben sind.

Notiz. Manchmal gibt es einen Rat - die Bewegungen nur bei sofortiger Ausführung zu entfernen.

Dies ist jedoch falsch: Sie werden die Situationen von Änderungen in "nicht betriebsbereiten" Dokumenten (gestern und früher) nicht berücksichtigen.

Das heißt, das Problem "Mangel an 6 Monitoren" (siehe oben) wird in diesem Fall nur für Dokumente gelöst, die bis zum heutigen Datum geändert wurden.

III. Eine Anfrage, die den Saldo der Chargen zur Abschreibung durch das FIFO erhält

In der Anfrage beziehen wir uns auf die Salden nach Losen und addieren die Summen für den Artikel.

Auf der Summenebene wird die Menge aus dem Beleg bezogen - MAXIMUM (Menge) und der Rest des Loses - SUM (Restmenge).

Was meinen Sie, kann die Menge aus dem Beleg den Gesamtsaldo der Nomenklatur für alle Chargen überschreiten?

Wenn Bewegungen in den Registern „Freie Salden“ und „Warenkosten“ mengenmäßig (sowohl Einnahmen als auch Ausgaben) synchron erfolgen, kann eine solche Situation nicht eintreten. Darauf legen wir fest, wenn wir Parteien abschreiben.

NS. Durch die Dokumentnomenklatur blättern

Dank der Ergebnisse in der Abfrage umgehen wir in der äußeren Schleife das Element aus dem Dokument.

V. Holen Sie sich den abzuschreibenden Betrag

Denken wir daran, wie viel Sie abschreiben müssen. Außerdem verringert sich dieser Betrag.

Vi. FIFO-Chargenzyklus

Der verschachtelte Zyklus enthält Chargen gemäß dem aktuellen Element.

Vii. Auf Null Rest prüfen

Im Allgemeinen ist die Situation, in der der Rest der Charge Null ist, ein Fehler in den Systemdaten (eine solche Situation ist jedoch möglich). Tatsache ist, dass die Summe in diesem Fall NICHT Null ist (die virtuelle Tabelle der Registerresiduen gibt keine Datensätze mit Null-Ressourcenwerten zurück).

Daher entscheiden wir uns, solche fehlerhaften Spiele zu überspringen. Falls gewünscht, können Sie dem Benutzer eine Diagnose ausgeben.

VIII. Berechnung der zu belastenden Menge und des zu belastenden Betrages

Die abzuschreibende Menge ist der Mindestwert zwischen dem Rest der Charge und dem, was noch abzuschreiben ist.

Der Betrag wird im elementaren Verhältnis berechnet.

Wenn der gesamte Saldo der Charge abgeschrieben wird, wird auch der gesamte Betrag dieser Charge abgeschrieben. Das ist Mathematik der 3. Klasse der Pfarrschule: X * Y / X = Y :)

Das heißt, Sie müssen KEINE zusätzlichen Kontrollen durchführen (manchmal geben sie solche Ratschläge), dass der gesamte Betrag abgeschrieben wird. Dieser Rat hat sogar einen eigenen Namen –“ Penny-Problem».

Und für diejenigen, die schlechte Ratschläge geben, ist es sinnvoll, sich die Konfiguration "1C: Accounting 8" anzusehen. Da (oh, Horror!) gibt es keine Kontrolle, ob die ganze Charge abgeschrieben ist :)

Hier ein Screenshot des allgemeinen Moduls "Buchhaltung von Waren", der Methode "Warensalden abschreiben":

IX. Reduzieren wir den abzuschreibenden Betrag

Sie müssen verstehen, wie viel noch abgeschrieben werden muss. Ziehen Sie dazu die Menge von der Registerbewegung ab.

Warum brauchen Sie verwaltete Schlösser?

So kamen wir zum verwalteten Blockieren.

Es scheint, dass die oben vorgestellten Algorithmen wie ein Uhrwerk funktionieren. Sie können sie selbst testen (Links zum Entladen von Datenbanken am Ende des Artikels).

Aber im echten Mehrbenutzerbetrieb beginnen Probleme, und wie so oft werden Probleme nicht sofort erkannt ...

Lassen Sie uns ein Beispiel für das häufigste Problem beim Abschreiben eines Artikels geben, wenn 2 Benutzer fast gleichzeitig versuchen, einen Artikel abzuschreiben (einen Verkauf registrieren):

In diesem Beispiel verkaufen zwei Benutzer fast gleichzeitig Waren - Beleg Nr. 2 wurde etwas später als Beleg 1 gebucht.

Nach Erhalt des Restbetrags meldet das System, dass der Restbetrag 10 Stück beträgt und beide Belege wurden erfolgreich gebucht. Das traurige Ergebnis ist, dass minus 5 LG-Monitore auf Lager sind.

Aber gleichzeitig funktioniert die Restkontrolle! Das heißt, wenn Dokument Nr. 2 nach dem Ende von Dokument Nr. 1 gebucht wird, wird das System Dokument Nr. 2 nicht buchen:

Manchmal gibt es einen Irrglauben - "Ich habe nur 3-4 Benutzer gleichzeitig in der Datenbank arbeiten, die Wahrscheinlichkeit von parallelen Dokumenten ist Null, sodass Sie nicht durch Sperren abgelenkt werden müssen."

Das ist sehr gefährliche Argumentation.

Sogar zwei Benutzer können Dokumente nahezu gleichzeitig buchen, wenn beispielsweise einer von ihnen eine Gruppenbuchung von Dokumenten durchführt.

Außerdem kann man sich nicht gegen eine Erhöhung der Nutzerzahl versichern. Geht das Geschäft „bergauf“, werden neue Verkäufer, Lagerhalter, Logistiker usw. benötigt. Daher müssen Sie sofort Lösungen erstellen, die in einer Mehrbenutzerumgebung dauerhaft funktionieren.

Wie löst man das Problem mit der parallelen Belegbuchung?

Die Lösung ist einfach - die LG-Monitore zum Zeitpunkt T1 zu sperren, damit andere Transaktionen nicht auf die Salden für dieses Produkt zugreifen können.

Dann wartet das System zum Zeitpunkt T2 darauf, dass der LG-Monitor entsperrt wird. Danach erhält das System den aktuellen Warenbestand und schreibt die Ware ab (oder nicht).

Noch ein paar Worte zur Klassifizierung von Schlössern.

Es gibt 2 Arten von Schlössern:

  • Objekt
  • Transaktional.

Um es einfach auszudrücken, Objektsperren erlauben nicht interaktiv um zwei Benutzer ein Objekt (Referenzelement oder Dokument) zu ändern.

Und Transaktionssperren ermöglichen programmatisch mit aktuellen Daten arbeiten, wenn Bewegungen in Registern ausgeführt werden.

In diesem Artikel werden wir uns für Transaktionssperren interessieren, dann nur für Sperren.

Wann sollten Sperren angewendet werden?

Die Aufgabe des Setzens von Sperren wird relevant, sobald die Datenbank startet mehr als ein Benutzer arbeiten.

In Transaktionen müssen Sperren gesetzt werden, und wann finden Transaktionen statt? Das ist richtig, der häufigste Fall ist die Dokumentation.

Das heißt, müssen beim Buchen aller Belege Sperren verhängt werden?

Auf keinen Fall. Es lohnt sich definitiv nicht, Sperren "nur für den Fall" zu setzen... Schließlich reduzieren Sperren allein die Parallelität der Benutzer (Systemskalierbarkeit).

Ressourcen (Tabellenzeilen), die in Transaktionen gelesen und geändert werden, müssen gesperrt werden. Zum Beispiel beim Buchen von Belegen.

Im obigen Beispiel ist eine solche Ressource die Produktbilanz. Das System musste den Saldo von dem Moment an, in dem es die Daten zum Saldo erhielt (T1) bis zum Ende der Transaktion (T3) sperren.

Notiz. Wenn Beleg Nr. 1 gebucht wird, beginnt die Transaktion vor dem Zeitpunkt des Erhalts der Salden. Der Einfachheit halber nehmen wir jedoch an, dass T1 sowohl der Startzeitpunkt des Dokuments als auch der Zeitpunkt des Erhalts der Salden ist.

Ein Beispiel, wenn keine Notwendigkeit zu sperren- Ausführen des Dokuments "Wareneingang". In diesem Fall gibt es keine Konkurrenz um Ressourcen (Reste, ...), sodass Sperren schädlich ist: Es verringert die Skalierbarkeit des Systems.

Automatische und kontrollierte Schlösser

Hier werden wir nicht auf die Theorie eingehen (dies ist ein Thema für einen separaten Artikel), aber sagen wir einfach, dass verwaltete Sperren optimaler sind.

Statt Theorie können wir einen Beweis liefern - alle modernen typischen Konfigurationen funktionieren auf verwalteten Schlössern.

Daher wird in unserer Modellkonfiguration der entsprechende Modus ausgewählt:

Geführte Verriegelungen in neuer Reststeuertechnik

Die Sperrung wird im Register „Freie Salden“ und nur für die im Dokument gefundenen Lagerartikel verhängt.

Und richtige Sperrmöglichkeit- so spät wie möglich.

Bei der neuen Methode der Saldenkontrolle muss dies vor der Erfassung (bzw. zum Zeitpunkt der Erfassung) der Bewegungen im Register „Freie Salden“ erfolgen, damit andere Transaktionen diese gemeinsame Ressource nicht ändern können.

Die Sperrung kann manuell (programmgesteuert) angewendet werden und wir zeigen Ihnen etwas später, wie es geht.

Der zusätzliche Bonus der neuen Residual Control-Technologie besteht jedoch darin, dass nur eine Codezeile benötigt wird, um gemeinsam genutzte Ressourcen zu sperren.

Sie müssen nur die BlockToUpdate-Eigenschaft des Register-Recordsets festlegen:

// 3.1. Den Rest des Registers sperren
# RegionRegion3_1
Movement.FreeRemains.BlockForChange = True;
#EndRegion

// 4. Aufzeichnung von Bewegungen in der Datenbank
# Region Region4
Bewegung.FreeRemains.Write = True;
Bewegungen.Schreiben ();
#EndRegion
...

Infolgedessen können 2 Transaktionen keine kostenlosen Salden für einen Artikel ändern.

Tatsächlich mit der Eigenschaft BlockForChange erwirbt keine verwaltete Sperre, es schaltet nur den Modus zum Teilen der Registersummen beim Schreiben aus.

Für unseren Artikel gilt jedoch grundsätzlich Folgendes: Das System sperrt die Kombination der in das Register geschriebenen Daten. Wir werden die Arbeit der BlockForChange-Eigenschaft in einem separaten Artikel detailliert betrachten.

Übrigens ist es in einem typischen UT 11 nicht so einfach, die Einstellung der BlockToChange-Eigenschaft für das Free Remains-Register zu finden. Der Punkt ist, dass dies im Register Recordset-Modul im Ereignis „Vor der Aufnahme“ geschieht.

Das ist alles, mit einer Zeile Code wurde der korrekte Betrieb des Systems sichergestellt!

Wichtig... Wir sperren das Register „Warenkosten“ nicht.

Wieso den? Eine solche Sperrung wäre unnötig (und das ist eine gewisse Belastung des 1C-Servers), da Bewegungen in die Register „Freie Salden“ und „Warenkosten“ immer synchron, also sequentiell nacheinander erfolgen.

Daher werden wir durch Sperren von Waren aus „Freiguthaben“ keine weiteren Transaktionen mit diesen Waren und im Register „Warenkosten“ zulassen.

Bei der alten Methode zur Steuerung der Residuen wird die Blockierung jedoch anders angewendet. Lassen Sie uns zunächst den Batch-Abschreibungsalgorithmus für diesen Fall analysieren.

Alte Rückstandskontrolltechnik

Denken Sie daran, dass die alte Methode angewendet werden kann, wenn Menge und Wert im selben Ledger erfasst werden.

Sei es das Register „Warenkosten“:

Dann sieht der Algorithmus zum Halten des Dokuments "Warenverkauf" so aus:

// 1. Der Ereignishandler "Vor der Aufnahme"
Verfahren vor der Aufnahme (Fehler, Aufnahmemodus, Buchungsmodus)

Wenn Aufnahmemodus = Dokumentaufnahmemodus.
UND NICHT ThisObject.ThisNew ()
Und dieses Objekt. Damals gehalten

Anfrage = Neue Anfrage;
Anfrage.Text =
"AUSWÄHLEN
| Dokument.Datum AS Datum
| VON
| Document.Realisierung von GoodsServices AS Document
| WO
| Dokument.Link = & Link ";
Request.SetParameter ("Link", ThisObject.Link);
Abfrageergebnis = Abfrage.Run ();
SelectDocument = QueryResult.Select ();
FetchDocument.Next();

ThisObject.AdditionalProperties.Insert ("OldDocumentDate", FetchDocument.Date);

Andernfalls
EndIf;

Ende des Verfahrens

Verfahren aktenkundig (Haftungsausschluss)

Wenn NICHT ThisObject.AdditionalProperties.Property ("DocumentDateShiftForward") Then

ThisObject.AdditionalProperties.Insert ("DocumentDate ShiftedForward",
ThisObject.Date> ThisObject.AdditionalProperties.OldDocumentDate);

Bericht (ThisObject.AdditionalProperties.DocumentDateShiftForward);
EndIf;

Ende des Verfahrens

Ablauf der Buchungsbearbeitung (Ablehnung, Modus)

// 2. Entfernen von "alten" Dokumentenbewegungen
Wenn AdditionalProperties.DateDocumentDate nach vorne verschoben wird, dann
Bewegungen.Einstandspreis der Ware.Record = True;
Bewegungen.Einstandspreis der Waren.Clear ();
Bewegungen.Schreiben ();
EndIf;

// 3. Setzen des Flags zum Aufzeichnen von Bewegungen am Ende der Transaktion
Bewegungen.Einstandspreis der Ware.Record = True;

// 4. Antrag, der die Salden zum Zeitpunkt des Dokuments nach Losen erhält
Anfrage = Neue Anfrage;
Anfrage.Text =
"AUSWÄHLEN
| ImplementierungProdukte.Nomenklatur AS-Nomenklatur,
| AMOUNT (SalesGoods.Quantity) AS Menge,
| MINIMUM (ImplementationProducts.LineNumber) AS LineNumber
| POST-ProdukteDokument
| VON
| Document.Realisierung von GoodsServices.Goods AS SaleGoods
| WO
| ImplementierungProdukte.Ref = & Link
| LADEN VON
| ImplementierungProdukte.Nomenklatur
| INDEX VON
| Nomenklatur
|;
|////////////////////////////////////////////////////////////////////////////////
| WÄHLEN
| ProduktDokument.Nomenklatur AS-Nomenklatur,
| ProdukteDokument.Menge AS Menge,
| ProduktDocument.LineNumber AS LineNumber,
| THERE IS NULL (Balance.QuantityRemainment, 0) AS AmountRemainment,
| ES IST NULL (Balance.AmountRemainst, 0) AS AmountRemainment,
| Bleibt Party AS Party
| VON
| ProdukteDokument AS ProdukteDokument
| LEFT JOIN Akkumulationsregister.Kostenpreis der Waren.Rest (
| &Zeitpunkt,
| Nomenklatur B
| (AUSWÄHLEN
| T. Nomenklatur AS Nomenklatur
| VON
| Warendokument AS T)) AS-Salden
| ON GoodsDocument.Nomenclature = Balances.Nomenclature
| BESTELLEN NACH
| Reste, Party, Moment in Time
| ERGEBNISSE
| MAXIMUM (Menge),
| BETRAG (Restbetrag)
| Software
| Zeilennummer ";

Request.SetParameter ("Moment of Time", Moment of Time ());
Request.SetParameter ("Link", Link);

Abfrageergebnis = Abfrage.Run ();

FetchNomenclature = QueryResult.Select (QueryResult Bypass.On Gruppierungen);

// 5. Zyklus nach der Nomenklatur - wir prüfen, ob die Menge für die Abschreibung ausreicht
Während SampleNomenclature.Next () Cycle

Nomenklaturknappheit = SampleNomenclature.Number - SampleNomenclature.Number Remaining;

Wenn Nomenklaturdefizit> 0 Dann
Nachricht = Neue Nachricht an den Benutzer;
Message.Text = "Nicht genügend Produkt in Menge:" + Nomenklaturdefizit;
Message.Field = "Produkte [" + (SelectionNomenclature.LineNumber-1) + "]. Menge";
Message.SetData (ThisObject);
Nachricht.Informieren ();
Ablehnung = wahr;
EndIf;

Wenn Fehler dann
Fortfahren;
EndIf;

// 6. Holen Sie sich den abzuschreibenden Betrag
RemainingWrite = SampleNomenclature.Number;
SamplePart = SampleNomenclature.Select ();

// 7. Loop by Batch
Während SamplePart.Next () And RemainingWrite> 0 Loop

Bewegung = Bewegung.Kosten vonProdukten.AddExpense ();
Bewegung.Periode = Datum;
Bewegung.Nomenklatur =SetupPart.Nomenclature;
Bewegung.Part = SampleParty.Part;
// 9. Berechnung des abzuschreibenden Betrages
Movement.Quantity = Min (RemainingWrite, SamplePart.QuantityRemaining);
// 10. Berechnung des zu belastenden Betrages
Bewegung.Summe = Bewegung.Nummer *
SampleBatch.Amount Remaining / SampleBatch.Number Remaining;

// 11. Abschreibungsbetrag verringern
RemainingWrite = RemainingWrite - Movement.Number;

Ende des Zyklus;
Ende des Zyklus;

Die Wahl des Herausgebers
Tagebücher: Dich zu berühren ist ein Märchen, dich zu küssen ist ein Schauer, deine Zuneigung fehlt so sehr, dass ich verrückt werde. Das ist keine Lüge, ohne dich also ...

Aktuelle Seite: 1 (das Buch hat insgesamt 36 Seiten) [verfügbare Passage zum Lesen: 7 Seiten] Colin Campbell, Thomas CampbellChinese ...

In der modernen Welt sind Fremdsprachenkenntnisse längst zu einem Pflichtgegenstand im Lebenslauf geworden. Sprachkenntnisse erleichtern das Auffinden ...

Aktuelle Seite: 1 (das Buch hat insgesamt 13 Seiten) [verfügbare Passage zum Lesen: 3 Seiten] Dieses Buch wird gut ergänzt durch: Erinnere dich an alles Arthur ...
Aktuelle Seite: 1 (das Buch hat insgesamt 22 Seiten) [verfügbare Passage zum Lesen: 5 Seiten] Barbara Sher, Annie Gottlieb Träumen ist nicht schädlich. Wie...
Meinem Großvater Herman Archangelsky gewidmet, mit Dank für die Einführung in die Tradition des Managementdenkens und für den richtigen Zeitpunkt ...
Finnischer Mann Statistik Finnische Männer sind wie der Traum vieler Frauen, mehr dazu hier: Stimmt, es gibt nicht genug davon ... ...
Wenn einer der Ehegatten beschlossen hat, heimliche Bekanntschaften zu machen, hat er dafür gute Gründe. Die Suche nach einer Geliebten oder Geliebten ist im Gange ...
Wenn zwei Menschen beschließen, ihre Beziehung zu registrieren oder zusammen zu leben, denken sie als letztes daran, dass die einst glühende Liebe vergeht und sie ...