1c dynamische Listentabelle umgehen.

Neben primitiven Datentypen, die in jeder Programmiersprache zu finden sind, gibt es in 1C einzigartige Typen. Jeder von ihnen hat seine eigenen Eigenschaften, Methoden, Funktionen, Zwecke und Verwendungsnuancen im System. Einer dieser Typen ist eine dynamische Liste, die viele angewandte Aufgaben erheblich vereinfacht. Deshalb sollten Entwickler dieses vielseitige Tool kennen und damit umgehen können.

Funktionen dynamischer Listen in 1C

Zweck dieser Art ist es, Informationen aus beliebigen Datenbanktabellen unabhängig von ihrem Typ anzuzeigen. Der Mechanismus wurde auf der Grundlage des SKD erstellt und verfügt über ähnliche Fähigkeiten. Dies bedeutet jedoch nicht, dass Sie unbedingt eine Abfrage in der 1C-Sprache schreiben müssen, obwohl diese Möglichkeit besteht und Sie sie verwenden müssen. Sie können einfach die Tabelle und die Informationen angeben, an denen Sie interessiert sind, und 1C generiert selbstständig eine einfache Abfrage.

Um zu sehen, wie eine dynamische Liste gebildet wird und welche Daten sie anzeigt, müssen Sie im Konfigurator verwaltete Formulare öffnen, wo sie sich befinden: in der Liste der Details über KontextmenüÖffnen Sie seine Eigenschaften und achten Sie auf den Punkt "Beliebige Anfrage". Wenn kein Kontrollkästchen vorhanden ist, spiegelt der Parameter "Haupttabelle" die Datenbanktabelle wider, aus der die Daten entnommen werden. Andernfalls spiegelt die dynamische Liste benutzerdefinierte Abfragedaten wider, die durch Öffnen der Listeneinrichtung angezeigt werden können.

Ein beliebiges Abfrageschema wird viel häufiger verwendet, da es eine großartige Möglichkeit bietet, eine Vielzahl von Daten zu kombinieren und anzuzeigen. Meistens wird dieser Mechanismus verwendet, um Lagerbestände, Artikelpreise, Einnahmen, Ausgaben oder Einkäufe widerzuspiegeln. Sie müssen es sorgfältig verwenden, da die Leistung bei komplexen Abfragen sinken kann.

Eine weitere nützliche Funktion dynamische Listeöffnet sich, wenn Sie auf die Beschriftung "Listeneinstellungen" klicken. Dieses Menü ermöglicht es, selbst bei Verwendung eines Standardsatzes von Feldern, Informationen für Endbenutzer zugänglicher und verständlicher zu machen. Unabhängig davon, ob es sich um eine willkürliche Anfrage handelt oder nicht, sehen Sie eine Registerkarte „Einstellungen“, auf der Sie Folgendes angeben können:

  • Auswahl einer dynamischen Liste;
  • Gruppierungen;
  • Sortierung;
  • Dekor.

Die Verwendung von Parametern macht dynamische Listen vielseitig und flexibel genug. Sie können sie auch an Requisiten in einem verwalteten Formular binden, und die Daten ändern sich je nach den vom Benutzer ausgewählten Optionen. Die Verwendung dieser Mechanismen kann anhand von Beispielen realer Probleme verstanden und gewürdigt werden.

Betrachten Sie als Beispiel das Problem, die Reste der Nomenklatur auf einem verwalteten Formular widerzuspiegeln. In der Praxis sind solche Aufträge in verschiedenen Konfigurationen durchaus üblich, und die dynamische Liste ist als Hilfsmittel ideal. Für diese Aufgabe müssen wir eine beliebige Abfrage, dynamische Listenparameter und ihre Einstellungen verwenden.

Zur besseren Übersichtlichkeit erstellen wir eine separate externe Verarbeitung und platzieren Sie eine dynamische Liste darauf. Um unsere Pläne umzusetzen, wird es nur wenige Tabellen mit Nomenklatur geben, daher müssen wir eine willkürliche Anfrage zulassen. Darin beschreiben wir den linken Zusammenhang des Nachschlagewerks mit Nomenklaturverzeichnis und Rückstandskataster und stellen das Nachschlagewerk als Haupttabelle ein. Ein solches Schema ermöglicht es Benutzern, während der Arbeit mit einer dynamischen Liste die Nomenklatur hinzuzufügen oder zu ändern.



Wählen Sie eine Nomenklatur Name Name als Name, Waren- und Verkaufskosten Sklad als Lager, Waren- und Verkaufskosten Sozialdesigns als Anzahl von Anlagen aus einem Verzeichnis Nomenklatur als Nomenklatur des linken Anschlusses des Registers. Kontinuität Ausgabe (iv auhitsaydata,)

Da der CurrentDate-Parameter in unserer Anfrage verwendet wurde, müssen wir seinen Wert festlegen, bevor wir die Verarbeitung verwenden. Weisen Sie dazu im Formularmodul in der Prozedur „On CreationOnServer“ per Standardbefehl die Funktion „CurrentSessionDate“ mit einem Standardbefehl zu. Wir müssen auch eine dynamische Liste auf dem Kontrollformular anzeigen und die Reihenfolge der Felder zur besseren Übersichtlichkeit ändern. Ziehen Sie die Requisiten „Nomenclature Remains“ in die Formularelemente (oben links) und verwenden Sie die blauen Pfeile, um die Reihenfolge der Felder in der Tabelle auf dem Formular zu ändern.

&At Server Procedure On CreationAt Server(Ausfall, Standardverarbeitung) Nomenklatur Remains.Parameters.SetParameterValue("CurrentDate",CurrentSessionDate()) EndProcedure


Bereits zu diesem Zeitpunkt können wir unsere externe Verarbeitung in 1C öffnen und sehen, dass die dynamische Liste funktioniert. Wir können die Salden einsehen, Nomenklaturen und Gruppen erstellen und suchen. Oft bitten Kunden darum, die Möglichkeit hinzuzufügen, das Datum auszuwählen, für das sie den Kontostand sehen. Bei einem Formular mit dynamischer Liste wird diese bereitgestellt von zusätzliches Feld und damit parametrieren.

Wir fügen das Attribut „Remains Date“ vom Typ „Date“ hinzu und übertragen es auf die Formularelemente. Im Feld events erstellen wir ein Event „OnChange“ und schreiben den Code zum Setzen des Parameters „CurrentDate“, der in der dynamischen Abfrage verwendet wird. Damit der Benutzer beim Öffnen des Formulars sofort versteht, an welchem ​​Datum er die Salden sieht, werden wir kleine Änderungen an der OnCreateOnServer-Prozedur vornehmen.



&OnServerProcedureOnCreateOnServer(Fehler, Standardverarbeitung)RemainsDate = CurrentSessionDate(); Item Remains.Parameters.SetParameterValue("CurrentDate", RemainsDate); Ende der Prozedur &Am Client-Prozedur RemainsDateOnChange(Element) Item Remains.Parameters.SetParameterValue("CurrentDate",RemainsDate); EndProzedur

Infolgedessen kann unser dynamisches Listenformular Salden für jedes Datum anzeigen.

Wir haben nur einen kleinen Teil der Möglichkeiten dieses Toolkits behandelt, aber das reicht bereits aus, um die Bequemlichkeit dieser Art von dynamischer Liste zu verstehen. Ein ähnlicher Mechanismus wird für eine Vielzahl von Aufgaben verwendet, findet sich aber am häufigsten in typische Konfigurationen v verwaltete Formulare:

  1. Auswahl;
  2. Listen.

Um eine dynamische Liste und ihre Anforderung in typischen verwalteten Formularen zu erhalten, muss der Entwickler das erforderliche Formular im Konfigurator öffnen. Suchen Sie im Abschnitt "Attribute" das Attribut mit dem Datentyp "DynamicList" (meistens ist es fett gedruckt). Seine Eigenschaften enthalten den Text der Anfrage, Auswahlen und andere Einstellungen.

Die 1C:Enterprise 8.2-Plattform kann dynamisch mit mehreren Datensätzen in einer Datenbanktabelle arbeiten, das heißt, sie kann Daten in Blöcken lesen. An früherer Stelle in den Artikeln haben wir den Mechanismus dynamischer Listen und Methoden zur Optimierung der Arbeit mit ihnen betrachtet.

Heute werden wir ein nicht standardmäßiges Problem für dynamische Listen lösen. Wir müssen die Summe für das Dokumentattribut "Betrag" berechnen und in der Fußzeile der Liste anzeigen. Berechnen Sie analog den Durchschnittswert für das Feld „Bewertung“ und zeigen Sie ihn ebenfalls in der Fußzeile der dynamischen Liste an. Die Berechnung der Gesamtfelder muss die Auswahl berücksichtigen, die der Benutzer in den Dokumentenlisteneinstellungen festgelegt hat.

Die ganze Schwierigkeit liegt darin, dass die dynamische Liste nicht alle Datensätze auf einmal, sondern portionsweise erhält. Dementsprechend können wir nicht sofort die Summe für alle Dokumente erhalten, die der aktuellen Auswahl entsprechen. Wie berechnet man die Summe?

Implementierung

Kommen wir also zur Lösung des Problems. Beginnen wir mit dem Ändern des Formulars, dann beschreiben wir den Algorithmus zum Erhalten der endgültigen Werte.

Formular und Schnittstelle

Lassen Sie uns zunächst ein Dokumentformular vorbereiten, um die letzten Felder anzuzeigen. Dazu fügen wir zwei String-Attribute der Form „Rating“ und „Amount“ hinzu.

Diese Details enthalten die Gesamtwerte für die Dokumente.

Um Attributwerte in der Fußzeile einer dynamischen Liste anzuzeigen, müssen Sie die entsprechende Option des zugehörigen Listenformularelements aktivieren (siehe folgenden Screenshot).

Nun müssen Sie entscheiden, bei welchem ​​Ereignis die Ergebnisse in der Fußzeile der Liste aktualisiert werden. Um die Entwicklung zu erleichtern, fügen wir den Befehl „Update“ und das entsprechende Formularelement zum Befehlsfeld hinzu. Wenn dieser Befehl ausgeführt wird, werden die Summen aktualisiert.

In der Testkonfiguration, die Sie über den Link am Ende des Artikels herunterladen können, habe ich beim Schreiben eines Dokuments auch ein Summenaktualisierungsereignis hinzugefügt. Dies verwendet den Formularbenachrichtigungsmechanismus. Darauf gehen wir nicht näher ein.

Algorithmus

Der problematischste Teil bleibt - Sie müssen die Werte der Summen erhalten. Gehen wir wie folgt vor: Wir bilden eine Datenbankabfrage, um die Werte der letzten Felder gemäß der in der dynamischen Liste festgelegten Auswahl zu erhalten. Es ist zu beachten, dass es bei der Auswahl zu einer komplexen Bedingung aus den Gruppen kommen kann.

Hinweis: Dynamische Listeneinstellungen (siehe Screenshot oben) basieren auf den Mechanismen des Data Composition System (ACS) . Dementsprechend können Sie mit ihnen auf ähnliche Weise arbeiten (programmgesteuert hinzufügen, ändern, lesen usw.).

Die Schritte zum Generieren einer Abfrage zum Abrufen der Ergebnisse lauten wie folgt:

1. Rufen Sie die anfängliche Anfrage für eine dynamische Liste ab.

Wie wir sehen können, wählt die Anfrage alle Details des Dokuments aus. Für eine kleine Komplikation habe ich mein eigenes Feld "LevelRating" hinzugefügt, das durch das Konstrukt "CHOICE" gebildet wird.

2. Wir bilden den Text der Anfragebedingungen (Abschnitt "WO") und ersetzen ihn in der ursprünglichen Anfrage.

Entsprechend der konfigurierten Auswahl der dynamischen Liste müssen wir dem empfangenen Quelltext der Anfrage Bedingungen hinzufügen.

Die Prozedur generiert je nach Typ des übergebenen Filterelements (Gruppe oder Filterelement) den entsprechenden Text der Bedingung. Alle Bedingungen in der Gruppe sind von Klammern eingerahmt, die Mitglieder der Gruppe sind ebenfalls von Klammern eingerahmt. Die Bedingungen zwischen Ausdrücken hängen von der übergeordneten Gruppe ab (die "UND"-Bedingung wird zwischen die obersten Elemente in der Hierarchie gesetzt).

Wenn das Element ein Verwendungskennzeichen (Eigenschaft "Verwendung") hat, wird das Element verarbeitet. Der generierte Text hängt auch von der Vergleichsbedingung (gleich, ungleich, in der Liste, etc.) ab. Die Abhängigkeit des generierten Textes der Bedingung von der Art des Vergleichs ist in der folgenden Funktion zu sehen.

Eine weitere meiner Meinung nach interessante Funktion ist "GetFieldTextOnView". Es wird benötigt, um Felder in den Abfragebedingungen zu ersetzen, die durch Ausdrücke der Abfragesprache gebildet werden. Oben habe ich der ursprünglichen Anfrage das Feld „LevelRating“ hinzugefügt. Wenn der Benutzer es in der Auswahl verwendet, muss der gesamte Ausdruck in die Abfragebedingung eingesetzt werden. Diese Funktion erhält den Text des Felds aus der Anfrage durch seine Darstellung. Bei solchen komplexen Feldern wird der gesamte Text des Ausdrucks zurückgegeben.

Weitere Einzelheiten zum Algorithmus finden Sie in der dem Artikel beigefügten Testkonfiguration. Unten sehen Sie einen Screenshot der Auswahleinstellungen und der dafür generierten Abfragebedingungen.

Der generierte Bedingungstext wird an die ursprüngliche Anforderung der dynamischen Liste angehängt. Das Abfrageergebnis wird in eine temporäre Tabelle gestellt.

3. Wir platzieren die erste Abfrage in einer temporären Tabelle und führen eine Gruppierung nach Zusammenfassungsfeldern mit den erforderlichen Aggregatfunktionen durch.

Ich möchte Sie daran erinnern, dass wir den Durchschnittswert für das Feld „Bewertung“ und den Gesamtbetrag für das Feld „Betrag“ benötigen. Wir haben bereits eine Abfrage unter Berücksichtigung der Auswahlen erstellt, es bleibt die Berechnung der Gesamtwerte. Dies geschieht mit folgender Abfrage:

Nach der Ausführung der Anfrage verarbeiten wir das Ergebnis, senden es an den Client zurück und schreiben es in die zuvor erstellten Formulardetails. Letztendlich haben wir die Anzeige der Summen in der Fußzeile der dynamischen Liste erhalten (siehe erster Screenshot zum Artikel).

Optimalität der Lösung

Im Allgemeinen kann sich dieser Ansatz nachteilig auf die Leistung auswirken. Wenn das Programm beispielsweise die Summe ohne die festgelegte Auswahl in der dynamischen Liste berechnet, kann die Anzahl der ausgewählten Datensätze sehr groß sein (z. B. für mehrere Jahre). Dadurch kann jede Aktualisierung der Ergebnisse mehrere zehn (!!!) Sekunden dauern. Daher ist es sinnvoll, die Summen nur dann zu berechnen, wenn eine Auswahl getroffen wurde. Dieser Zustand eine Testkonfiguration einbauen.

Außerdem können wir die Berechnung der Ergebnisse nur serverseitig anfordern. Daher müssen Sie die Anfrage an den Server ernsthaft angehen, da das Verfahren zum Aktualisieren der Gesamtsummen sehr oft durchgeführt werden kann. Stellen Sie sich ein Register von KKM-Schecks in einer Handelsorganisation vor, wo bis zu 5 Schecks pro Minute und bis zu 300 Schecks pro Stunde eingegeben werden können. Nach jedem Schreiben des Dokuments wird die Summenaktualisierung aufgerufen. Daher wäre es sinnvoll, den übertragenen Verkehr durch Verwendung von Out-of-Context-Verfahren zu reduzieren.

Der folgende Screenshot zeigt Programmiercode Aufrufen einer Out-of-Context-Serverfunktion, die Summen zurückgibt.

Der erste Parameter ist die Auswahl einer dynamischen Liste, der zweite die Struktur vom Typ „FilterFieldNameFilterFieldValueType“. Beachten Sie, dass der erste Parameter in der Funktion als eigenständiger Wert empfangen wird. Ich kann nicht genau sagen, warum, aber wenn Sie die Auswahl als Link übergeben, gibt die Plattform einen Fehler aus, dass die Auswahl nicht geändert werden kann. Nur so konnte der Fehler umgangen werden.->

Hinweis: Durch die Verwendung von Out-of-Context-Verfahren können Sie den übertragenen Datenverkehr um ein Vielfaches reduzieren, da Formulardaten im Gegensatz zu Kontext-Server-Verfahren (die "&AtServer"-Anweisung) nicht an den Server übertragen werden.

Abschluss

Abschließend möchte ich sagen, dass ein solcher Ansatz zur Berechnung von Summen in einer dynamischen Liste aus entwicklungsmethodischer Sicht falsch ist. Es wäre richtig, eine Gesamtsumme über die Register zu erhalten. Zum Beispiel können wir im Scheckjournal den Geldbetrag in der aktuellen Registrierkasse entweder nach Dokumenten oder nach dem entsprechenden Sammelregister abrufen.

Außerdem können Sie durch die Verwendung von Kumulregistern die Summen ohne Berücksichtigung der Auswahl berechnen, da das System optimal mit den bereits berechneten Summen der vergangenen Monate arbeitet.

Die im Artikel beschriebene Methode findet jedoch beim Lösen von Problemen statt.

Herunterladen:

Home Notizen aus dem Spiegel

21.04.2014 Dynamische Listendaten abrufen

Implementiert in Version 8.3.6.1977.

Wir haben die Möglichkeit implementiert, die angezeigten Daten einfach und bequem über eine dynamische Liste zu erhalten.

Möglicherweise benötigen Sie die dynamischen Listendaten, um sie in einer nicht standardmäßigen, "spezifischen" Form zu drucken. Oder um mit ihnen bestimmte Aktionen auszuführen. Senden Sie beispielsweise einen Brief an alle Kontrahenten, die Sie in der Liste nach bestimmten Kriterien ausgewählt haben.

Darüber hinaus gibt es eine Reihe von Aufgaben, bei denen der Benutzer zusätzlich zu der Liste von Elementen auch die dieser Liste zugeordneten zusammenfassenden Daten sehen möchte. Hat er beispielsweise die Waren einer bestimmten Produktgruppe und eines bestimmten Lieferanten ausgewählt, möchte er sofort die Gesamtzahl dieser Waren in der Datenbank sehen.

Die dynamische Liste selbst kann Ihnen diese Informationen nicht liefern. Der Zweck einer dynamischen Liste ist die Bereitstellung Schnellansicht große Datenmengen. Daher liest es die Daten in Blöcken, die für die Anzeige auf einem oder zwei Bildschirmen erforderlich sind. Und „weiß nichts“ zum Beispiel von der Gesamtmenge an Daten, die er lesen muss.

Im Allgemeinen, um zu bekommen Weitere Informationen die der Benutzer möchte, müssen Sie die Datenbank abfragen. Genau das gleiche wie das in der dynamischen Liste verwendete.

Vorher konnte man das machen. Aber es war nicht immer einfach. Denn neben dem Text der ursprünglichen Abfrage, nach der die dynamische Liste arbeitet, müssten Sie alle Selektionen, Sortierungen und sonstigen Parameter kennen, die der Benutzer in der Tabelle, die die Daten anzeigt, interaktiv setzt.

Jetzt ist diese Aufgabe leicht gelöst. Die dynamische Listentabelle hat zwei neue Methoden:

  • GetExecutableDataCompositionSchema();
  • GetExecutableDataCompositionSettings().

So erhalten Sie das Datenzusammensetzungsschema selbst und vor allem alle seine Einstellungen, dank denen der Benutzer die Liste genau so sieht, wie sie ist. Alles, was Sie tun müssen, ist, das Layout programmgesteuert zu gestalten und es in eine Sammlung von Werten (z Softwareverarbeitung) oder hinein Tabellendokument(zum Anzeigen):

Als Ergebnis erhalten Sie eine Struktur (oder einen Bericht) mit Spalten und Zeilen, die in einer dynamischen Listentabelle angezeigt werden.

Wichtig ist, dass das Layout und die Einstellungen, die Sie aus der dynamischen Listentabelle erhalten, unter anderem die Sichtbarkeit der Spalten und die angewendete Suche berücksichtigen. Da die Einstellungen separat bezogen werden, können Sie die Zusammensetzung der Felder für Ihre eigenen Zwecke ändern und erhalten beispielsweise alle Spalten der Liste und nicht nur die, die für den Benutzer sichtbar sind.

Bei der Ausgabe in ein Tabellenkalkulationsdokument gibt es einen weiteren schönen Moment. Im Allgemeinen wird das Erscheinungsbild des Berichts entsprechen Aussehen dynamische Listentabellen zu dem Zeitpunkt, zu dem das Schema und die Einstellungen empfangen werden. Einschließlich der bedingten Gestaltung der Tabelle. Nur wenn Sie die bedingte Gestaltung des Formulars auch auf den Report übertragen wollen, sind einige zusätzliche Aktionen erforderlich.

Beim Abschließen von Konfigurationen trifft jeder 1C-Programmierer auf dynamische Listen.
Eine dynamische Liste ist ein Schnittstellenobjekt, das verwendet wird, um verschiedene Listen von Datenbankobjekten oder Nicht-Objektdaten anzuzeigen – Registereinträge.
Beispielsweise wird eine dynamische Liste verwendet, um eine Liste von Elementen anzuzeigen:

Um die Möglichkeiten einer dynamischen Liste zu demonstrieren, erstellen wir eine externe Verarbeitung und fügen das Hauptformular hinzu. Fügen wir dem Formular ein neues Attribut vom Typ "Dynamische Liste" hinzu. Lassen Sie uns zu seinen Eigenschaften gehen und sehen, was dort ist.
Uns interessiert die Eigenschaft „Benutzerdefinierte Anfrage“. Wenn Sie es aktivieren, werden uns alle Möglichkeiten einer dynamischen Liste gezeigt. Wir können eine Abfrage mit fast allen Funktionen der Abfragesprache des 1C: Enterprise-Systems schreiben. Aktivieren Sie das Kontrollkästchen und klicken Sie auf den Link "Öffnen":

Standardmäßig zeigt unsere Liste eine Liste von Artikeln mit einem Gesamtsaldo für alle Lager an. Um eine solche Liste zu implementieren, fügen Sie die folgende Abfrage hinzu:


Als Haupttabelle wählen wir "Verzeichnis. Nomenklatur", dies ermöglicht uns, mit der dynamischen Liste zu arbeiten, wie mit der Liste der Nomenklatur - Elemente des Verzeichnisses hinzufügen, ändern, zum Löschen markieren. Außerdem bietet das Setzen der Haupttabelle die Möglichkeit des dynamischen Auslesens der Daten, dh die Auswahl erfolgt portionsweise nach Bedarf.
Als nächstes müssen wir Formularelemente für unsere Liste erstellen:

Wenn wir versuchen, unsere Verarbeitung in dieser Form auszuführen, erhalten wir eine Fehlermeldung:


Um es zu beseitigen, müssen Sie den Wert des Parameters "Period" einstellen. Dazu können Sie die Methode "SetParameterValue" der Collection "Parameters" der dynamischen Liste verwenden. Die Methode benötigt zwei Parameter:
. "Parameter" - Typ: Zeichenkette; DataCompositionParameter. Der Name des Parameters oder Datenzusammensetzungsparameters, dessen Wert festgelegt werden soll;
. "Wert" - Typ: Beliebig. Der einzustellende Wert.
Kann im "OnCreateOnServer"-Handler des Formulars aufgerufen werden:

Haben Sie eine Frage, benötigen Sie die Hilfe eines Beraters?


Lassen Sie uns dem Benutzer die Möglichkeit geben, den Zeitraum für den Erhalt von Salden zu ändern. Fügen wir dazu das Attribut und das damit verbundene Formularelement "Datum" hinzu:


Rufen Sie im Handler „OnChange“ des Formularelements „Date“ die Methode „SetParameterValue“ auf und übergeben Sie den Wert des zugehörigen Attributs als Wert. Ebenso werden wir die Prozedur "On CreationAtServer" des Formulars ändern. Da die Methode auf dem Client verfügbar ist, muss der Server nicht aufgerufen werden:


Wenn sich das Datum ändert, werden die Salden jetzt automatisch aktualisiert:




Angenommen, Benutzer möchten entweder aktuelle Salden oder prognostizierte Einnahmen anzeigen. Betrachten wir eine der Implementierungsoptionen. Lassen Sie uns ein boolesches Formularattribut und ein zugehöriges Optionsfeld hinzufügen:


Wenn Sie den Wert des Schalters ändern, ändern wir den Text der Anfrage. Dazu verwenden wir den Eventhandler „OnChange“ des Formularelements „DisplayQuantityToReceipt“. Wir müssen die Eigenschaft "QueryText" der dynamischen Liste abhängig vom Wert des Attributs ändern. Da diese Eigenschaft auf dem Client nicht verfügbar ist, ist ein Aufruf der Serverprozedur erforderlich:


Das Ergebnis der vorgenommenen Änderungen:



Endlich ist der Traum eines jeden "Siebenspielers" wahr geworden. Wie oft haben Benutzer des Programms 7.7 darum gebeten, eine normale Auswahl von Elementen zu treffen. Damit Sie die Salden und Preise sehen und Filter setzen können. Ich musste mir diverse Tricks einfallen lassen, bis hin zum Schreiben externer Komponenten. In 1C 8.2 erschienen dynamische Listen. Ich schlage vor, darüber nachzudenken, was es ist und was sie uns in 1C 8.3 geben können.

Nehmen wir einige als Basis Testkonfiguration 1C: „Unternehmensbuchhaltung 3.0“. Wir werden jetzt keine Auswahl treffen, sondern nur ein weiteres Auswahlformular im Nachschlagewerk "Nomenklatur" hinzufügen und es vorübergehend zum Hauptformular machen:

Beim Erstellen fügt das System dem Formular standardmäßig ein Tabellenfeld vom Typ „Dynamische Liste“ hinzu.

Lassen Sie uns zu seinen Eigenschaften gehen und sehen, was dort ist.

Uns interessiert zunächst die Checkbox „Beliebige Anfrage“. Er wird uns alle Vorteile einer dynamischen Liste offenbaren. Wir werden die Möglichkeit haben, unsere eigene Abfrage zu schreiben, und zwar mit Parametern. Aktivieren Sie das Kontrollkästchen und klicken Sie auf den Link "Öffnen":

Es öffnet sich ein Fenster mit einem vorgefertigten Code für . Bisher werden dort einfach alle Felder des Verzeichnisses "Nomenklatur" aufgelistet.

Erhalten Sie 267 kostenlose 1C-Videolektionen:

Wie Sie sehen, gibt es eine Anrufschaltfläche "" und ein Kontrollkästchen, mit dem Sie den Inhalt der Liste dynamisch ändern können. Das heißt, wenn ein anderer Benutzer etwas im Verzeichnis ändert, ändert sich dies auch in unserer Liste. Darüber hinaus gibt es eine Registerkarte Einstellungen, aber darauf gehen wir später ein.

Benutzerdefinierte Abfrage in dynamischer Liste

Lassen Sie uns zuerst die Abfrage erstellen, die wir mit Salden und Preisen benötigen. Ungefähr so:

Registerkarte Einstellungen

Und jetzt das Leckerste! Gehen Sie auf die Registerkarte "Einstellungen". Und wir sehen sofort, dass wir auf der ersten Registerkarte eine beliebige Auswahl für jedes Feld in der Anfrage treffen können:

Programmatisches Setzen von Abfrageparametern in einer dynamischen Liste 1C 8.3

Vergessen Sie nicht, dass wir zwei Parameter in der Anfrage haben: "Zeitraum" und "Preistyp". Wir müssen sie an die Anfrage übergeben, sonst kommt es zu einem Fehler.

Lassen Sie uns diese Parameter in die Formularparameter schreiben und die folgenden Zeilen im Formularmodul hinzufügen:

&OnServerProcedure OnCreateOnServer(Fehler, Standardverarbeitung) Liste. Optionen. SetParameterValue("Zeitraum", Parameter. Datum) ; Aufführen. Optionen. SetParameterValue("Preistyp" , Parameter.Preistyp) ; EndProzedur

Wird geladen...
Spitze