Die Daten werden durch eine dynamische Liste angezeigt

Zusätzlich zu den 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 Nutzungsnuancen im System. Einer dieser Typen ist eine dynamische Liste, die viele Anwendungsaufgaben erheblich erleichtert. Deshalb müssen Entwickler dieses universelle Werkzeug kennen und damit umgehen können.

Funktionen dynamischer Listen in 1C

Der Zweck dieses Typs besteht darin, Informationen aus beliebigen Datenbanktabellen anzuzeigen, unabhängig von deren Typ. Der Mechanismus wurde auf Basis von SKD erstellt und verfügt über ähnliche Fähigkeiten. Dies bedeutet jedoch nicht, dass Sie unbedingt eine Anfrage in der 1C-Sprache verfassen müssen, obwohl diese Möglichkeit besteht und genutzt werden sollte. Sie können einfach die Tabelle angeben, deren Informationen Sie interessieren, und 1C generiert selbstständig eine einfache Abfrage.

Um zu sehen, wie eine dynamische Liste aufgebaut ist und welche Daten sie anzeigt, müssen Sie die verwalteten Formulare dort öffnen, wo sie sich im Konfigurator befinden: Öffnen Sie in der Detailliste über das Kontextmenü deren Eigenschaften und achten Sie auf „Benutzerdefiniert“. „Anfrage“-Element. Wenn kein Kontrollkästchen vorhanden ist, spiegelt der Parameter „Haupttabelle“ die Datenbanktabelle wider, aus der die Daten entnommen werden. Andernfalls spiegelt die dynamische Liste die Daten einer benutzerdefinierten Abfrage wider, die durch Öffnen der Listeneinstellungen angezeigt werden kann.

Das benutzerdefinierte Abfrageschema wird viel häufiger verwendet, da es eine hervorragende Möglichkeit bietet, eine Vielzahl von Daten zu kombinieren und anzuzeigen. Am häufigsten wird dieser Mechanismus verwendet, um Lagerbestände, Artikelpreise, Einnahmen, Ausgaben oder Einkäufe widerzuspiegeln. Sie müssen es vorsichtig verwenden, da die Leistung bei komplexen Abfragen sinken kann.

Eine weitere nützliche Eigenschaft einer dynamischen Liste öffnet sich, wenn Sie auf die Aufschrift „Listeneinstellungen“ klicken. Mit diesem Menü können Sie Informationen für Endbenutzer zugänglicher und verständlicher machen, selbst wenn Sie einen Standardsatz von Feldern verwenden. Unabhängig davon, ob die Anfrage willkürlich ist oder nicht, wird Ihnen die Registerkarte „Einstellungen“ angezeigt, in der Sie Folgendes festlegen können:

  • Dynamische Listenauswahl;
  • Gruppen;
  • Sortierung;
  • Dekor.

Die Verwendung von Parametern macht dynamische Listen universell und recht flexibel. Sie können sie auch mit Details in einem verwalteten Formular verknüpfen, und die Daten ändern sich abhängig von den vom Benutzer ausgewählten Parametern. Die Verwendung dieser Mechanismen kann anhand von Beispielen realer Probleme verstanden und gewürdigt werden.

Betrachten Sie als Beispiel die Aufgabe, die Überreste der Nomenklatur in einer kontrollierten Form wiederzugeben. In der Praxis kommen solche Aufträge recht häufig in unterschiedlichen Konfigurationen vor, als Hilfsmittel bietet sich eine dynamische Liste an. Für diese Aufgabe müssen wir eine benutzerdefinierte Abfrage, dynamische Listenparameter und deren Einstellungen verwenden.

Zur besseren Übersichtlichkeit erstellen wir eine separate externe Verarbeitung und platzieren darauf eine dynamische Liste. Um unsere Pläne umzusetzen, wird die Tabelle mit der Nomenklatur nicht ausreichen, daher müssen wir eine beliebige Abfrage zulassen. Darin beschreiben wir die linke Verbindung des Verzeichnisses mit der Artikelliste und dem Saldenregister und legen das Verzeichnis als Haupttabelle fest. Mit diesem Schema können Benutzer, die mit einer dynamischen Liste arbeiten, Elemente hinzufügen oder ändern.



SELECT NomenclatureList.Name AS Name, GoodsInWarehousesRemainings.Warehouse AS Warehouse, GoodsInWarehousesRemainings.QuantityRemaining AS QuantityRemaining FROM Directory.Nomenclature AS NomenclatureList LEFT CONNECTION RegisterAccumulations.GoodsInWarehouses.Remainings(&CurrentDate,) AS GoodsOnUS TreasuresRemaining Software NomenclatureList.Link = ProductsInWarehouse sRemainings.Nomenclature WO

Da unsere Anfrage den Parameter „CurrentDate“ verwendet hat, müssen wir seinen Wert festlegen, bevor wir die Verarbeitung verwenden. Weisen Sie ihm dazu im Formularmodul in der Prozedur „When CreatedOnServer“ mit einem Standardbefehl die Funktion „CurrentSessionDate“ zu. Wir müssen auch die dynamische Liste im Kontrollformular anzeigen und die Reihenfolge der Felder aus Gründen der Übersichtlichkeit ändern. Ziehen Sie das Attribut „Verbleibende Nomenklatur“ in die Formularelemente (oberer linker Teil) und ändern Sie mit den blauen Pfeilen die Reihenfolge der Felder in der Tabelle auf dem Formular.

&Auf der Serverprozedur bei Erstellung auf dem Server (Fehler, Standardverarbeitung) Die Nomenklatur bleibt erhalten. Parameter. ParameterValue("CurrentDate", CurrentSessionDate()) EndProcedure festlegen


Bereits zu diesem Zeitpunkt können wir unsere externe Verarbeitung in 1C öffnen und sehen, dass die dynamische Liste funktioniert. Wir können Salden einsehen, Artikel und Gruppen erstellen und suchen. Oft möchten Kunden die Möglichkeit hinzufügen, das Datum auszuwählen, an dem sie ihre Salden sehen möchten. Bei einem Formular mit dynamischer Liste wird dies durch ein zusätzliches Feld und die Parametrierung darüber erreicht.

Fügen Sie das Attribut „DateRemaining“ vom Typ „Date“ hinzu und übertragen Sie es auf die Formularelemente. Im Feld Ereignisse erstellen wir das Ereignis „OnChange“ und schreiben den Code zum Setzen des Parameters „CurrentDate“, der in der dynamischen Anfrage verwendet wird. Damit der Benutzer beim Öffnen des Formulars sofort versteht, an welchem ​​Datum er die Salden sieht, werden wir kleine Änderungen am Verfahren „When CreatedOnServer“ vornehmen.



&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)RemainingDate = CurrentSessionDate(); Item Remains.Parameters.SetParameterValue("CurrentDate", RemainingDate); Ende der Prozedur &Auf der Client-Prozedur Verbleibendes DatumWhenChanged(Element)Nomenklatur Remaining.Parameters.SetParameterValue("CurrentDate",RemainingDate); Ende des Verfahrens

Daher kann unser dynamisches Listenformular die Salden zu jedem Datum widerspiegeln.

Wir haben nur einen kleinen Teil der Möglichkeiten dieses Toolkits betrachtet, aber das reicht bereits aus, um den Nutzen dieser Art dynamischer Liste zu verstehen. Ein ähnlicher Mechanismus wird für viele Aufgaben verwendet, ist jedoch am häufigsten in typischen Konfigurationen in verwalteten Formularen zu finden:

  1. Auswahl;
  2. Listen.

Um eine dynamische Liste und deren Anforderung in standardmäßig verwalteten Formularen zu erhalten, muss der Entwickler das gewünschte Formular im Konfigurator öffnen. Im Detailbereich finden Sie die Details mit dem Datentyp „DynamicList“ (meistens ist er fett hervorgehoben). Seine Eigenschaften enthalten den Anforderungstext, Auswahlmöglichkeiten und andere Einstellungen.

Plattform 1C:Enterprise 8.2 kann dynamisch mit vielen Datensätzen in einer Datenbanktabelle arbeiten, also Daten portionsweise lesen. In früheren Artikeln haben wir uns mit dem Mechanismus dynamischer Listen und Methoden zur Optimierung der Arbeit mit ihnen befasst.

Heute werden wir ein nicht standardmäßiges Problem für dynamische Listen lösen. Wir müssen die Gesamtsumme mithilfe des Dokumentattributs „Betrag“ berechnen und in der Fußzeile der Liste anzeigen. Berechnen Sie auf ähnliche Weise den Durchschnittswert für das Feld „Bewertung“ und zeigen Sie ihn ebenfalls in der Fußzeile der dynamischen Liste an. Bei der Berechnung der Gesamtzahl der Felder muss die vom Benutzer in den Dokumentenlisteneinstellungen festgelegte Auswahl berücksichtigt werden.

Die ganze Schwierigkeit liegt darin, dass eine dynamische Liste nicht alle Einträge auf einmal, sondern portionsweise erhält. Daher können wir nicht sofort eine Zusammenfassung aller Dokumente erhalten, die der aktuellen Auswahl entsprechen. Wie berechnet man die Gesamtsumme?

Implementierung

Kommen wir also zur Lösung des Problems. Beginnen wir mit der Änderung der Form, dann beschreiben wir den Algorithmus zum Erhalten der Endwerte.

Form und Schnittstelle

Bereiten wir zunächst ein Dokumentformular vor, um die resultierenden Felder anzuzeigen. Dazu fügen wir zwei String-Details der Form „Rating“ und „Amount“ hinzu.

In diesen Angaben werden die Gesamtwerte der Dokumente erfasst.

Um die Werte von Details in der Fußzeile einer dynamischen Liste anzuzeigen, müssen Sie die entsprechende Option für das zugehörige Element des Listenformulars aktivieren (siehe folgenden Screenshot).

Jetzt müssen Sie entscheiden, bei welchem ​​Ereignis die Ergebnisse in der Listenfußzeile aktualisiert werden. Um die Entwicklung zu vereinfachen, fügen wir den Befehl „Aktualisieren“ 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 Aufzeichnen eines Dokuments auch ein zusammenfassendes Aktualisierungsereignis hinzugefügt. In diesem Fall wird der Formverwendet. Wir werden hierauf nicht näher eingehen.

Algorithmus

Der problematischste Teil bleibt bestehen: Sie müssen die Gesamtwerte ermitteln. Gehen wir wie folgt vor: Wir stellen eine Anfrage an die Datenbank, um die Werte der endgültigen Felder gemäß der in der dynamischen Liste festgelegten Auswahl zu erhalten. Es ist zu bedenken, dass die Auswahl von Gruppen eine komplexe Bedingung sein kann.

Hinweis: Die Einstellungen für dynamische Listen (siehe Screenshot oben) basieren auf den Mechanismen des Data Composition Systems (DCS). Dementsprechend können Sie auf ähnliche Weise mit ihnen arbeiten (programmgesteuertes Hinzufügen, Ändern, Lesen usw.).

Die Schritte zur Erstellung einer Anfrage zum Erhalt von Ergebnissen sind wie folgt:

1. Wir erhalten die erste Anfrage für die dynamische Liste.

Wie wir sehen können, wählt die Anfrage alle Dokumentdetails aus. Um die Komplexität etwas zu erhöhen, habe ich mein eigenes Feld „Rating Level“ hinzugefügt, das vom Konstrukt „SELECT“ generiert wird.

2. Wir erstellen den Text der Anfragebedingungen (Abschnitt „WHERE“) und ersetzen ihn in der ursprünglichen Anfrage.

Wir müssen dem empfangenen Quellanforderungstext Bedingungen gemäß der konfigurierten dynamischen Listenauswahl hinzufügen.

Die Prozedur generiert je nach Typ des übergebenen Auswahlelements (Gruppe oder Auswahlelement) den entsprechenden Bedingungstext. Alle Bedingungen in einer Gruppe sind von Klammern umgeben, und die in der Gruppe enthaltenen Bedingungen sind ebenfalls von Klammern umgeben. Die Bedingungen zwischen Ausdrücken hängen von der übergeordneten Gruppe ab (eine „AND“-Bedingung wird zwischen den obersten Elementen in der Hierarchie platziert).

Wenn für ein Element ein Verwendungsflag gesetzt ist (die Eigenschaft „Nutzung“), wird das Element verarbeitet. Der generierte Text hängt auch von der Vergleichsbedingung (Gleich, ungleich, in einer Liste usw.) ab. Die Abhängigkeit des generierten Bedingungstextes von der Art des Vergleichs lässt sich an der folgenden Funktion erkennen.

Eine weitere meiner Meinung nach interessante Funktion ist „GetFieldTextByView“. Es wird benötigt, um Felder, die durch Ausdrücke der Abfragesprache gebildet werden, in den Abfragebedingungen zu ersetzen. Oben habe ich das Feld „Bewertungsstufe“ zur ursprünglichen Anfrage hinzugefügt. Wenn der Benutzer es bei der Auswahl verwendet, muss der gesamte Ausdruck in die Abfragebedingung eingesetzt werden. Diese Funktion ruft den Feldtext aus der Anfrage basierend auf seiner Darstellung ab. Bei solch komplexen Feldern wird der gesamte Text des Ausdrucks zurückgegeben.

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

Der generierte Bedingungstext wird an die ursprüngliche dynamische Listenanforderung angehängt. Das Ergebnis der Abfrage wird in einer temporären Tabelle abgelegt.

3. Wir platzieren die erste Abfrage in einer temporären Tabelle und führen die 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“ ermitteln müssen. Unter Berücksichtigung der Auswahlen haben wir bereits eine Anfrage generiert, es müssen nur noch die Gesamtwerte berechnet werden. Dies geschieht mit folgender Anfrage:

Nachdem wir die Anfrage ausgeführt haben, verarbeiten wir das resultierende Ergebnis, geben es an den Kunden zurück und schreiben es in die Formulardetails, die wir zuvor erstellt haben. Letztendlich bekamen wir die Ergebnisse in der Fußzeile der dynamischen Liste angezeigt (siehe den ersten Screenshot im Artikel).

Optimalität der Lösung

Im Allgemeinen kann sich dieser Ansatz negativ auf die Leistung auswirken. Wenn das Programm beispielsweise die Gesamtsumme ohne festgelegte Auswahl in einer dynamischen Liste berechnet, kann die Anzahl der ausgewählten Datensätze sehr groß sein (z. B. über mehrere Jahre hinweg). Daher kann jede Aktualisierung der Ergebnisse mehrere zehn (!!!) Sekunden dauern. Daher ist es sinnvoll, die Ergebnisse nur dann zu berechnen, wenn die Selektion etabliert ist. Diese Bedingungen habe ich in einer Testkonfiguration festgelegt.

Außerdem können wir die Summen und Anfragen nur serverseitig berechnen. Daher müssen Sie sich ernsthaft an den Server wenden, da der Vorgang zur Aktualisierung der Gesamtsummen sehr oft durchgeführt werden kann. Stellen Sie sich ein Kassenbelegjournal in einer Handelsorganisation vor, in dem bis zu 5 Belege pro Minute und bis zu 300 Belege pro Stunde eingegeben werden können. Jedes Mal, wenn ein Dokument geschrieben wird, werden die Gesamtsummen aktualisiert. Daher wäre es sinnvoll, den übertragenen Datenverkehr durch den Einsatz von Out-of-Context-Verfahren zu reduzieren.

Der folgende Screenshot zeigt den Programmcode zum Aufruf einer Out-of-Context-Serverfunktion, die Summen zurückgibt.

Der erste Parameter übergibt die dynamische Listenauswahl, der zweite ist eine Struktur vom Typ „SelectionFieldNameSelectionFieldValueType“. Bitte beachten Sie, dass der erste Parameter in der Funktion als eigener Wert erhalten wird. Ich kann nicht genau sagen, warum, aber wenn Sie die Auswahl als Link übergeben, gibt die Plattform eine Fehlermeldung aus, dass die Auswahl nicht geändert werden kann. Nur so konnte der Fehler umgangen werden.->

Hinweis: Durch die Verwendung von Out-of-Context-Prozeduren können Sie die Größe des übertragenen Datenverkehrs um ein Vielfaches reduzieren, da Formulardaten im Gegensatz zu kontextsensitiven Serverprozeduren (Direktive „&OnServer“) nicht an den Server übertragen werden.

Abschluss

Abschließend möchte ich sagen, dass dieser Ansatz zur Berechnung von Summen in einer dynamischen Liste aus entwicklungsmethodischer Sicht falsch ist. Es wäre richtig, die Gesamtsumme nach Registern zu ermitteln. Beispielsweise können wir im Scheckbuch wiederum den Geldbetrag in der aktuellen Registrierkasse entweder aus Dokumenten oder aus dem entsprechenden Kumulregister entnehmen.

Darüber hinaus ermöglicht Ihnen die Verwendung von Akkumulationsregistern die Berechnung von Summen ohne Berücksichtigung der Selektion, da das System optimal mit bereits berechneten Summen für frühere Monate arbeitet.

Dennoch findet bei der Lösung von Problemen die im Artikel beschriebene Methode statt.

Dateien zum Download:

Drucken (Strg+P)

Dynamische Liste

1. Allgemeine Information

Eine dynamische Liste ist ein spezieller Datentyp, der es Ihnen ermöglicht, beliebige Informationen aus Datenbanktabellen in einem Formular anzuzeigen. Dazu müssen Sie die Tabelle angeben, aus der Sie Daten anzeigen möchten, oder die resultierende Auswahl in einer Abfragesprache beschreiben.
Der Mechanismus basiert auf einem Datenkompositionssystem und bietet Funktionen zum Sortieren, Auswählen, Suchen, Gruppieren und bedingten Formatieren der empfangenen Daten. In diesem Fall ist die Datenquelle eine Anfrage, die entweder automatisch vom System generiert wird (basierend auf den angegebenen Daten) oder manuell vom Entwickler geschrieben wird.

Reis. 1. Optionen zum Erstellen einer dynamischen Liste

Beim Erstellen von Formularattributen des Typs DynamischeListe Ein Entwickler kann zwei Möglichkeiten wählen, eine Datenabfrage zu erstellen:
● Durch Angabe der Haupttabelle – in diesem Fall müssen Sie nur die Tabelle (Haupttabelleneigenschaft) angeben, von der Sie Daten erhalten möchten, und das System generiert automatisch eine Abfrage für die Daten (siehe rechter Teil in Abb. 1).
● Manuelles Generieren einer Anfrage – dazu müssen Sie die Eigenschaft „Benutzerdefinierte Anfrage“ festlegen (siehe linke Seite von Abb. 1). Danach ist die manuelle Generierung einer Anfrage zum Abrufen von Daten aus der Infobase verfügbar.
Eine Abfrage kann Daten aus mehreren Tabellen abrufen, sodass Sie eine Primärtabelle angeben können. Auf diese Weise kann die dynamische Liste bestimmen, welche Daten primär und welche sekundär sind, und Informationen korrekt auswählen und anzeigen sowie Standardbefehle bereitstellen. Wenn es jedoch nicht möglich ist, die Haupttabelle in der Abfrage zu ermitteln, kann sie nicht angegeben werden, aber dann
Die dynamische Liste stellt keine Befehle bereit, die sich auf die Haupttabelle beziehen. Darüber hinaus wird in diesem Fall (ohne Angabe der Haupttabelle) die Effizienz der Datenbeschaffung durch eine dynamische Liste erheblich reduziert.
Um die Leistung zu verbessern, wird empfohlen, alle Verknüpfungen, die in einer benutzerdefinierten Abfrage nur zum Abrufen zusätzlicher Daten verwendet werden, mithilfe einer Abfragesprachenerweiterung für das Datenkompositionssystem optional zu machen.
Für eine dynamische Liste, die das Hauptformularattribut darstellt, ist es möglich, Auswahlwerte mithilfe eines Formularparameters festzulegen Auswahl. Hierzu ist es erforderlich, dass sich im Parameter der Name der Struktureigenschaft befindet Auswahl,
stimmte mit dem Namen des dynamischen Listenauswahlfelds überein. In diesem Fall wird der Wert der Struktureigenschaft als rechter Wert des Auswahlelements festgelegt. Wenn als Wert eines Elements des Auswahlparameters eines dynamischen Listenformulars ein Array, ein festes Array oder eine Werteliste übergeben wird, wird der Auswahl eine Bedingung mit der Option „In Liste“ im richtigen Wert hinzugefügt davon wird eine Liste von Werten platziert (in die das Array und das feste Array konvertiert werden).
Eine beliebige Abfrage in einer dynamischen Liste kann eine Abfrage sein, bei der ein Parameter zum Generieren des Werts eines Felds verwendet wird, zum Beispiel:

WÄHLEN
AUSWAHL
WHEN Delivery.Coefficient = 1 THEN &Presentation
SONST Lieferung. Koeffizient
END AS-Verhältnis
AUS

Wenn außerdem der Typ des Parameterwerts vom Typ des Objektattributs abweicht (z. B. Requisiten1 Typ hat Nummer, und der Parameterwert ist Typ Linie), um das Feld korrekt anzuzeigen, müssen Sie den Parameterwert explizit in den gewünschten Typ umwandeln:

WÄHLEN
AUSWAHL
WHEN Delivery.Coefficient = 1 THEN EXPRESS(&Representation AS String(100)) ELSE Delivery. Koeffizient
END AS-Verhältnis
AUS
Dokument.Lieferung von Produkten, WIE man liefert

Wenn das Feld, durch das die Auswahl festgelegt wird, mithilfe von Funktionsoptionen deaktiviert ist, wird die Auswahl durch ein solches Feld nicht installiert, selbst wenn der Auswahlwert als Formularparameter oder Auswahlparameter-Links übergeben wird.
Mithilfe der Eigenschaft „Dynamisches Datenlesen“ geben Sie einer dynamischen Liste an, dass Daten in kleinen Portionen gelesen werden müssen
(Weitere Einzelheiten zu Möglichkeiten zum Abrufen von Daten mithilfe einer dynamischen Liste und Daten-Caching finden Sie unten.) Unabhängig von diesem Attribut gelten folgende Bedingungen:

● Wenn der Ansichtsmodus auf hierarchische Liste eingestellt ist, werden nur die Daten der aktuellen Gruppe und die Daten aller übergeordneten Elemente (ohne untergeordnete Elemente) gelesen.
● Wenn der Baumansichtsmodus eingestellt ist, werden nur Daten von offenen Baumknoten gelesen.
● Das einmalige Laden dynamischer Listendaten wird nicht unterstützt, wenn hierarchisches Durchsuchen eingestellt ist (Anzeigeeigenschaft ist auf Baum gesetzt) ​​und die anfängliche Baumanzeige auf Alle Ebenen erweitern eingestellt ist. Um Daten zu erhalten, werden so viele Anfragen an den Server gestellt, wie Knoten in der angezeigten Liste vorhanden sind.
Innerhalb eines einzelnen Datenabrufs verwendet eine dynamische Liste zuvor erstellte temporäre Tabellen wieder, wenn die folgenden Bedingungen erfüllt sind:
● Die Listen-Batch-Abfrage enthält keine Abfragen nach der Haupt-Batch-Abfrage.
● Die Zusammensetzung der temporären Tabellen und der darin enthaltenen Felder bleibt gegenüber der vorherigen Ausführung der Stapelanforderung unverändert.

Bei ihrer Arbeit verwendet die dynamische Liste die Werte der folgenden Eigenschaften von Metadatenobjektdetails:
● Format,
● Bearbeitungsformat,
● Hinweis,
● Zeichen zur Hervorhebung negativer Werte,
● Maske,
● mehrzeiliges Moduszeichen,
● Zeichen einer fortgeschrittenen Bearbeitung,
● Passwortmodus.
Bei der Anzeige und Bearbeitung der Auswahl und Parameter des Datenkompositionssystems wird das Bearbeitungsformat des entsprechenden Feldes verwendet.

2. Einschränkungen und Funktionen

Denken Sie beim Festlegen der Auswahl in einer dynamischen Liste daran, dass die Auswahl keine Auswirkungen auf Gruppen hat, wenn der Anzeigemodus für die dynamische Liste „Hierarchische Liste“ oder „Baum“ ist. Mit „Gruppen“ meinen wir ein Element eines Verzeichnisses oder Plans von Merkmalstypen, dessen ThisGroup-Eigenschaft auf True gesetzt ist.
Es werden Qualifikationen angewendet, die automatisch von einer dynamischen Liste auf die Standarddetails „Eigentümer“, „Übergeordnetes Element“, „Datum“, „Zeitraum“ und „Diese Gruppe“ angewendet werden
unter Verwendung von Standardtools für Datenkompositionssysteme. Die Auswahl, die automatisch durch eine dynamische Liste auf Schlüsselfelder angewendet wird, kann sowohl mit Standardmitteln des Datenkompositionssystems als auch durch direktes Hinzufügen von Bedingungen zum Anforderungstext angewendet werden IN zu den Feldern der Haupttabelle. Durch die Anwendung von Auswahlen mithilfe von Layout-Tools können diese sowohl in verschachtelten Abfragen als auch in Parametern virtueller Tabellen angewendet werden.

Bei der Entwicklung dynamischer Listen wird empfohlen, alle dynamischen Listen mit benutzerdefinierten Abfragen zu testen. Während des Überprüfungsprozesses sollten Sie sicherstellen, dass eine Listenabfrage verschachtelte Abfragen oder virtuelle Tabellen enthält und in diesen Feldern mit Aliasnamen verfügbar sind, die mit den Aliasnamen der Standarddetails „Eigentümer“, „Übergeordnetes Element“, „Datum“, „Zeitraum“, „Diese Gruppe“ oder „Schlüssel“ übereinstimmen Auswahl, dann sind diese Felder gültig und entsprechen den Standarddetails, mit denen ihr Spitzname übereinstimmt. Ist dies nicht der Fall, sollten Sie die Anfrage so ändern, dass sie mit oder übereinstimmt
der Spitzname war anders.
Wenn Sie sich dafür entscheiden, eine Anfrage manuell zu generieren, gelten für die Anfrage einige Einschränkungen:
● Die Verwendung der FIRST-Anweisung in einer dynamischen Listenabfrage wird nicht unterstützt. Wenn Sie eine durch die Anzahl der Datensätze in einer dynamischen Liste begrenzte Auswahl verwenden müssen, sollten Sie die Anfrage zum Generieren einer dynamischen Liste so überarbeiten, dass der eigentliche Inhalt der Anfrage in einer Unterabfrage platziert wird, und die Anzahl der Datensätze begrenzen in dieser Unterabfrage empfangen. Sie können anstelle einer Unterabfrage auch eine temporäre Tabelle verwenden.
● Auswahl, Sortierung und Gruppierung werden nicht unterstützt:

  • Entsprechend den Angaben der tabellarischen Teile.
  • Felder anzeigen.
  • DataVersion-Feld.
  • Vordefiniertes DataName-Feld.
  • Feld vom Typ „Kontenplantabelle“.
  • Feld Art der Bewegung der Akkumulationsregistertabelle.
  • Feldtypwerte der Merkmalstypplantabelle.
  • Typfeld Typ;
  • Feld vom Typ String (unbegrenzte Länge).
  • Feld vom Typ BinaryData.

● Das Sortieren und Gruppieren nach Subconto-Feldern wird nicht unterstützt<НомерСубконто>und ViewSubconto<НомерСубконто>Tabellen MovementsSubconto des Buchhaltungsregisters.
● Das Gruppieren nach Feldern, bei denen es sich um Abfragesprachenausdrücke handelt, die Aggregatfunktionen enthalten, wird nicht unterstützt.
● Bei Auswahl der Haupttabelle gelten für die dynamische Listenabfrage folgende Einschränkungen:

  • Verknüpfungen werden nicht unterstützt.
  • Der Abschnitt ORDER BY wird nicht unterstützt. Sie sollten eine Abfrage ohne Haupttabelle verwenden oder die erforderliche Reihenfolge über die dynamischen Listeneinstellungen festlegen.

● Wenn eine dynamische Liste als hierarchische Liste oder Baum angezeigt wird, wird ein Eintrag nicht als dynamische Liste angezeigt, es sei denn, mindestens ein übergeordneter Eintrag dieses Eintrags wird angezeigt. Mit anderen Worten: Um ein Element einer hierarchischen Liste anzuzeigen, muss eine dynamische Liste auch alle übergeordneten Elemente dieses Elements bis zum Anfang der Liste anzeigen. In diesem Fall meinen wir mit dem Anfang der Liste beides
das Stammelement des hierarchischen Objekts, das von einer dynamischen Liste angezeigt wird, oder das als ParentTopLevel-Eigenschaft einer Formulartabellenerweiterung für eine dynamische Liste festgelegte Element.

Die Verwendung der folgenden Tabellen als Haupttabelle einer dynamischen Liste wird nicht unterstützt:

● Eine Tabelle, die keinen Schlüssel hat, der jeden Tabellendatensatz eindeutig identifiziert (eine Referenz für Objekttabellen und einen Datensatzschlüssel für Registertabellen). Die folgenden Tabellen können jedoch als Haupttabelle einer dynamischen Liste festgelegt werden (obwohl sie keinen Schlüssel haben):

● Subconto-Tabelle des Buchhaltungsregisters;
● alle virtuellen Tabellen des Buchhaltungsregisters, mit Ausnahme der Tabelle MovementsSubconto;
● Tabellen mit konstanten Werten (einschließlich der Konstantentabelle);
● Tabellen externer Datenquellen ohne Schlüsselfelder;
● Cube-Tabellen externer Datenquellen;
● Akkumulationsregistertabellen:

  • Revolutionstisch;
  • Bilanztabelle;
  • Tabelle der Umsätze und Salden.

● Berechnungsregistertabellen:

  • Tabelle der tatsächlichen Gültigkeitsdauer;
  • Zeitplandaten;
  • Grundinformationen.

● Tabellen tabellarischer Teile von Objekten;
● Änderungsregistrierungstabellen (in Datenaustauschmechanismen verwendet);
● Sequenztabellen;
● Umrechnungstabellen (wird in periodischen Abrechnungsmechanismen verwendet).
● Eine Tabelle, die in einer Abfrage nur in einem Outer-Join verwendet wird.

Mit anderen Worten: Eine dynamische Liste mit der angegebenen Haupttabelle funktioniert korrekt, wenn als Ergebnis der Ausführung der Abfrage
Wenn als Datenquelle angegeben wird, erhöht sich die Anzahl der aus der Haupttabelle erhaltenen Zeilen nicht (unter Berücksichtigung der auferlegten Auswahl). Wenn sich durch die Ausführung einer Abfrage die Anzahl der durch die Abfrage aus der Haupttabelle ermittelten Zeilen erhöht, führt dies zu einer Verletzung der Eindeutigkeit des Schlüssels der in der Liste angezeigten Datensätze der Tabelle. In diesem Fall müssen Sie die Verwendung der Haupttabelle der dynamischen Liste deaktivieren.
Wenn Sie mit einer dynamischen Liste arbeiten, müssen Sie Zugriffsrechte auf die von der Liste angezeigten Details berücksichtigen:
● Daten aus dynamischen Listenspalten, die mit der Eigenschaft „Immer verwenden“ gekennzeichnet sind, für die der aktuelle Benutzer jedoch nicht über das Ansichtsrecht verfügt, werden nicht an die Clientseite übertragen. Zugriff auf Daten solcher Spalten (mithilfe der CurrentData-Eigenschaft und der RowData()-Methode)
Clientseitig nicht möglich.
● Wenn der aktuelle Benutzer nicht über das Recht „Anzeigen“ für ein Schlüsselfeld einer dynamischen Liste verfügt, führt das Abrufen von Daten aus dieser dynamischen Liste zu einem Zugriffsverletzungsfehler.
Für eine dynamische Liste, die eine Aufzählungsliste anzeigt, gibt es keine Option zum interaktiven Anpassen der Liste.
Die Zusammensetzung der Spalten und Einstellungen der dynamischen Liste werden über Aliase der Auswahlfelder mit den Abfragefeldern verknüpft. Wenn in einer Abfrage für ein Auswahlfeld kein Alias ​​angegeben wird und es sich bei dem Feld um ein Systemfeld handelt, wird der Feldname für die englische Version der integrierten Sprache als Alias ​​verwendet.
Die angegebene Beziehung bedeutet, dass beim Ändern (oder expliziten Angeben eines Alias ​​für ein Feld, für das ein automatischer Alias ​​verwendet wurde)
Alias ​​des Abfragefelds, das die Daten der dynamischen Liste generiert, gehen die Attributeinstellungen der dynamischen Liste verloren, die Formularelemente „verlieren“ die angezeigten Details, die Einstellungen der dynamischen Liste werden falsch usw.
Wenn die Datenquelle einer dynamischen Liste eine Tabelle (regulär oder virtuell) ist, die es Ihnen ermöglicht, eine Auswahl nach Zeitraum festzulegen, und wenn der Benutzer den Anzeigezeitraum in einer solchen dynamischen Liste festlegt (Befehl Datumsintervall festlegen...),
Die angegebenen Periodengrenzen werden als Auswahlwerte oder virtuelle Tabellenparameter festgelegt. Wenn mittels Spracherweiterung
Bei Abfragen für das Datenkompositionssystem wurden die Namen der virtuellen Tabellenparameter explizit angegeben - die Parameter mit den angegebenen
Namen. Tabellen, für die es möglich ist, den Zeitraum für die Anzeige oder Verarbeitung von Daten zu steuern:
● Registertabellen (hauptsächlich oder virtuell), für die eine Auswahl nach Zeitraum möglich ist (für das Berechnungsregister - nach Registrierungszeitraum);
● Haupttabellen mit Dokumenten, Geschäftsprozessen und Aufgaben;
● Haupttabellen der Dokumentenjournale;
● Hauptsequenztabellen, Sequenzgrenztabellen.
Der Abfrageparameter der dynamischen Liste kann ein Array oder eine Werteliste sein. Handelt es sich bei dem Parameter jedoch um eine Werteliste, wird nur der erste Wert in der Liste als Auswahlwert verwendet. Wenn eine dynamische Liste eine Abfrage mit Parametern verwendet, muss die anfängliche Einstellung der Parameterwerte im OnCreateOnServer-Handler durchgeführt werden.
Beachten Sie bei der Anzeige dynamischer Listendaten die folgenden Punkte:
● Wenn Sie die Eigenschaften einer dynamischen Liste programmgesteuert ändern, werden die mit der Liste verknüpften Befehlsfelder nicht automatisch neu gefüllt.
mit dieser dynamischen Liste.
● Wenn mehrere Felder mit dem Gruppierungsmodus in einer Zelle zu einer Gruppe gruppiert sind und in den gruppierten Feldern ein Feld vorhanden ist, das als Kontrollkästchen angezeigt wird, wird dieses Kontrollkästchen in der resultierenden Zelle immer zuerst angezeigt (links davon). Text).
Wenn in einer dynamischen Liste der Datentyp für Felder bestimmt wird, deren Ausdrücke Parameter, Felder oder Literale enthalten, wird der resultierende Typ durch die Typen der Felder und Literale bestimmt. Wenn der Parameterwerttyp nicht im resultierenden Datentyp enthalten ist, wird sein Wert abgeschnitten.
Im folgenden Beispiel hat das Feld beispielsweise den Typ „Zahl“.

AUSWAHL
WENN ES EINE LÜGE IST
DANN 5
ANSONSTEN
&Parameter
ENDE

Wenn Sie den Parameter Parameter auf einen Wert eines anderen Typs festlegen, erhält die dynamische Liste für dieses Feld den Wert 0 (den Standardwert für den Typ „Zahl“).
Wenn Sie in einer solchen Situation einen Parameter eines anderen Typs auswählen müssen, wird empfohlen, das Abfragesprachenkonstrukt zu verwenden ÄUSSERN. Zum Beispiel,
Wenn Sie im obigen Beispiel eine Zeichenfolge mit maximal 100 Zeichen an den Parameter übergeben müssen, sollten Sie die einfache Angabe des Parameters durch einen Ausdruck mit einer expliziten Typumwandlung ersetzen:

AUSWAHL
WENN ES EINE LÜGE IST
DANN 5
ANSONSTEN
EXPRESS(&Parameter AS String(100))
ENDE

Wenn der beliebige Text einer dynamischen Listenanforderung Parameter in den Ausdrücken der Auswahlfelder verwendet, sollten Sie die Art der Parameter mithilfe des Konstrukts explizit angeben ÄUSSERN. Zum Beispiel statt &Nomenklatur AS-Nomenklatur verwenden
EXPRESS(&Nomenclature AS Directory.Nomenclature) AS Nomenclature. Andernfalls könnte die Suche über die Suchleiste funktionieren
falsch sein oder Fehler erzeugen.

3. Methoden zum Abrufen und Zwischenspeichern von Daten mit einer dynamischen Liste

Beim Abrufen der anzuzeigenden Daten verwendet eine dynamische Liste eine von drei Methoden:
1. Das Lesen aus der Datenbank erfolgt in Blöcken mit einer Anzahl von Datenelementen, die geringfügig größer ist als die Anzahl der gleichzeitig in der Liste angezeigten Zeilen (jedoch nicht weniger als 20). Die Daten werden nicht auf dem Server zwischengespeichert.
2. Das Auslesen aus der Datenbank erfolgt in Seiten mit 1.000 Datenelementen. Daten werden auf dem Server zwischengespeichert. Hierarchische Daten werden zwischengespeichert: Für jedes übergeordnete Element werden nicht mehr als zwei Seiten mit Elementen zwischengespeichert. Pro dynamischer Liste werden nicht mehr als 20 Seiten mit Elementen zwischengespeichert. Das Caching wird durch eine dynamische Liste für die folgenden Tabellen aktiviert:
● Auswahlkriterien;
● Alle Tabellen des Buchhaltungsregisters, mit Ausnahme der Haupttabelle und der MovementsSubconto-Tabelle;
● Alle Akkumulationsregistertabellen außer der Haupttabelle;
● Alle Tabellen des Informationsregisters, außer der Haupttabelle;
● Alle Tabellen des Berechnungsregisters, außer der Haupttabelle;
● Virtuelle Aufgabentabelle nach Ausführendem;
● Tabellen externer Quellen ohne Schlüssel;
● Cubes aus externen Quellen.

3. Das Auslesen aus der Datenbank erfolgt in Seiten mit 1.000 Elementen. Der erste Teil entspricht 1 Seite. Jeder nachfolgende Teil erhöht sich um 1 Seite (wenn das Ende des vorherigen Beispiels erreicht ist). Je näher sich der „Betrachtungspunkt“ dem Ende der angezeigten Daten nähert, desto größer wird die Stichprobe aus der Datenbank gelesen und entspricht schließlich allen angezeigten Daten. Daten werden auf dem Server zwischengespeichert. Die maximale Anzahl von Einträgen im Cache und in der dynamischen Liste beträgt 1.000.000.
Abhängig davon, was in der Haupttabelle der dynamischen Liste ausgewählt ist und welchen Wert die Eigenschaft „Dynamisches Lesen“ annimmt, wird die eine oder andere Methode zum Lesen von Daten verwendet:

● Eine der folgenden Tabellen ist als Wert der Haupttabelleneigenschaft angegeben: Austauschplan, Verzeichnis, Dokumentenliste, Dokumentenjournal, Merkmalsplantypen, Kontenplan, Berechnungsplantypen, Geschäftsprozess, Aufgabe, Tabelle von Geschäftsprozesspunkte:



● Eine der folgenden Tabellen ist als Wert der Eigenschaft Haupttabelle angegeben: die Haupttabelle des Informationsregisters, das Akkumulationsregister, das Abrechnungsregister, das Berechnungsregister, die virtuelle Tabelle des Abrechnungsregisters MovementsSubconto:

● Dynamische Leseeigenschaft:
● Installiert: Methode 1 wird verwendet (Beschreibung der Methoden siehe oben).
● Zurücksetzen: Methode 2 wird verwendet (Beschreibung der Methoden siehe oben).

● Die Eigenschaft Haupttabelle enthält die Auswahlkriterientabelle oder Aufgabentabelle nach Ausführendem (Tasks By Performer):
● Schlüssel zur Identifizierung einer Tabellenzeile: Link.

● Die Eigenschaft Haupttabelle gibt die virtuelle Tabelle des Informationsregisters SliceFirst oder SliceLast an:
● Schlüssel zur Identifizierung einer Tabellenzeile: RecordKey.
● Die Eigenschaft „Dynamisches Lesen“ ist nicht anwendbar.
● Methode 2 wird verwendet (Beschreibung der Methoden siehe oben).

● Die Eigenschaft „Haupttabelle“ ist auf eine der virtuellen Registertabellen festgelegt, mit Ausnahme der oben aufgeführten:

● Die Eigenschaft „Dynamisches Lesen“ ist nicht anwendbar.

● Die Haupttabelleneigenschaft ist nicht angegeben, es wird eine beliebige Abfrage verwendet:
● Schlüssel zur Identifizierung einer Tabellenzeile: Nummer.
● Die Eigenschaft „Dynamisches Lesen“ ist nicht anwendbar.
● Methode 3 wird verwendet (Beschreibung der Methoden siehe oben).

Zur Anzeige werden die Daten in Portionen an den Client übertragen, deren Größe der Portionsgröße bei der 1. Methode zum Auslesen von Daten (beschrieben am Anfang dieses Abschnitts) ähnelt.
Wenn Sie ein Formular erstellen, das eine dynamische Liste enthält, werden zunächst 45 Datenelemente für jede sichtbare dynamische Liste an den Client übergeben (wenn die Liste mehr als 45 Elemente enthält). Wenn die dynamische Liste mehr als 45 Zeilen anzeigt, wird beim Öffnen des Formulars ein zusätzlicher Serveraufruf durchgeführt, um die fehlenden Datenelemente abzurufen.

4. Dynamische Listeneinstellungen

Eigenschaftenlisteneinstellungen – Durch Klicken auf den Hyperlink „Öffnen“ wird ein Formular zum Einrichten der Anzeige einer dynamischen Liste geöffnet. Das Einrichten einer Liste erfolgt auf die gleiche Weise wie ähnliche Vorgänge in einem Datenkompositionssystem.


Reis. 2. Bedingtes Styling einer dynamischen Liste

Beim Einrichten einer dynamischen Liste in der Konfiguration hat der Anwendungsentwickler die Möglichkeit, Folgendes zu tun:
● Legen Sie die Felder fest, nach denen Sie sortieren möchten.
● die Auswahl der Daten in der Liste beschreiben;
● bedingte Darstellungseinstellungen festlegen;
● Legen Sie die Felder fest, nach denen Sie die Daten gruppieren möchten.
Es ist sinnvoll, die Sortierung dem Entwickler zu überlassen, wenn Sie mit der vom System eingestellten Standardsortierung nicht zufrieden sind.

BERATUNG. Es ist zu bedenken, dass eine schlechte Auswahl der Sortierfelder (sowie die Auswahl und Gruppierung von Daten) die Effizienz der dynamischen Stichprobenentnahme negativ beeinflusst.
Aus Sicht eines Anwendungsentwicklers bestehen dynamische Listeneinstellungen aus mehreren Teilen, die miteinander verbunden sind. Die Haupteigenschaft, über die Sie die Einstellungen einer dynamischen Liste verwalten können, ist LinkerSettings. Dieses Objekt enthält drei Einstellungssätze, die bei der Systemausführung die endgültigen Einstellungen bestimmen, die auf die dynamische Liste angewendet werden:
● Einstellungen – im Konfiguratormodus erstellte Einstellungen. Die Order-Eigenschaft der dynamischen Liste bietet schnellen Zugriff auf die Settings.Order-Eigenschaft des Einstellungs-Builders der dynamischen Liste. Daher sind die folgenden Konstrukte gleichwertig:
List.Order und List.SettingsLinker.Settings.Order;
● Benutzereinstellungen – das sind Einstellungen, die vom Benutzer im 1C:Enterprise-Modus geändert werden;
● Feste Einstellungen – diese Einstellungen werden über die integrierte Sprache festgelegt. Diese Eigenschaft enthält auch Auswahlwerte, die über ihre Parameter an das Formular übergeben werden. Die dynamischen Listeneigenschaften „Auswahl“, „Optionen“ und „Bedingte Darstellung“ bieten schnellen Zugriff auf die festen Einstellungen des Builders für dynamische Listeneinstellungen. Mit anderen Worten, diese Aufrufe sind gleichwertig:
List.Settings Composer.FixedSettings.Selection und List.Selection.
Beim Erstellen der endgültigen Einstellungen für eine dynamische Liste werden verschiedene Einstellungsmöglichkeiten wie folgt kombiniert:
● Wenn eine Art von Einstellungen vollständig als benutzerdefiniert markiert ist, umfassen die resultierenden Einstellungen die benutzerdefinierten Einstellungen
(List.ComposerSettings.UserSettings). Wenn außerdem Einstellungselemente als nicht verfügbar markiert sind, werden diese Einstellungen in die resultierenden Einstellungen der List.Settings Composer-Eigenschaft eingefügt. Einstellungen.
● Wenn eine Art von Einstellung nicht vollständig, sondern Element für Element als benutzerdefiniert markiert ist, gilt Folgendes:
● Als benutzerdefiniert markierte Elemente werden in die resultierenden Einstellungen der List.SettingsComposer.CustomSettings-Eigenschaft einbezogen.
● Als nicht verfügbar markierte Elemente werden in die resultierenden Einstellungen der List.SettingsComposer.Settings-Eigenschaft einbezogen.
● Feste Einstellungen (List.SettingsComposer.FixedSettings) werden den resultierenden Einstellungen „wie sie sind“ hinzugefügt. Gleichzeitig ist es nicht akzeptabel, dass die Fest- und Benutzereinstellungen Einstellungen mit demselben Namen enthalten, beispielsweise eine Auswahl mit demselben linken Wert in der Bedingung.

Wenn die Einstellungen der dynamischen Liste Einstellungen enthalten, die über Funktionsoptionen deaktiviert sind, werden diese Einstellungen aus der Liste der verfügbaren Einstellungen entfernt, wenn die Daten der dynamischen Liste abgerufen werden.
Die Steuerung, welche Einstellungen dem Benutzer zur Verfügung stehen und welche nicht, erfolgt im Fenster mit den dynamischen Listeneinstellungen.


Reis. 3. Kontrollieren Sie die Einbindung in die Benutzereinstellungen

Das Kontrollkästchen am unteren Rand des Fensters (siehe Abb. 3) ist dafür verantwortlich, die gesamte Art der Einstellungen in den Einstellungen (normal oder schnell) zu platzieren. Diese Funktion steht zur Auswahl, Sortierung, Gruppierung und Konditionalisierung zur Verfügung. Wenn die Einstellungen mit dem Bearbeitungsmodus „Schnellauswahl“ angegeben werden, müssen Sie in der Eigenschaft „Benutzereinstellungsgruppe“ der Tabelle des Formulars, das die dynamische Liste anzeigt, eine leere Gruppe des Formulars angeben, in der die mit den Schnellbenutzereinstellungen verknüpften Elemente enthalten sind Die dynamische Liste wird gefunden. Wenn die Gruppe nicht angegeben ist, werden die Schnellbenutzereinstellungen nicht im Formular angezeigt. Es ist auch möglich, die Erstellung benutzerdefinierter Einstellungen mithilfe der integrierten Sprache mithilfe der Methode CreateCustomSettingsFormItems() der dynamischen Listenerweiterung explizit aufzurufen.
Es besteht auch die Möglichkeit zu wählen, ob bestimmte Einstellungselemente in den Benutzereinstellungen platziert werden sollen. Diese Funktion ist für Auswahl- und bedingte Designelemente verfügbar (siehe Abbildung 3).

Wenn beim Öffnen einer dynamischen Liste spezielle Einstellungen geladen werden müssen, gibt es zwei Möglichkeiten:
● Verwendung des dynamischen Listenformularparameters UserSettings. Die in diesem Parameter enthaltenen Daten werden in den dynamischen Listeneinstellungen des Benutzers platziert.
● Verwendung des dynamischen Listenformularparameters UserSettingsKey. Wenn Sie diesen Parameter beim Öffnen eines Formulars angeben, werden die Benutzereinstellungen, die sich im Einstellungsspeicher mit dem angegebenen Schlüssel befinden, in die dynamische Liste geladen, die das Hauptattribut des Formulars darstellt.

5. Suchen Sie in einer dynamischen Liste

Eine dynamische Liste auf dem Formular bietet die Möglichkeit, die angezeigten Daten interaktiv zu durchsuchen. Die Suche kann mit den folgenden Tools durchgeführt werden: Suchleiste, Suchdialog, Suche nach dem aktuellen Wert, Verwendung des Suchverlaufs und Einstellen des Zeitraums (für dynamische Listen mit Dokumentenanzeige). Das Suchergebnis ist eine begrenzte Menge von Datensätzen
eine dynamische Liste (der für einen bestimmten Benutzer verfügbaren), die den Suchkriterien entspricht.
Um die Suchfunktionen einer dynamischen Liste zu steuern, gibt es drei Tabelleneigenschaften im verwalteten Formular, das die dynamische Liste anzeigt:
● Position der Suchzeichenfolge – definiert die Position der Suchzeichenfolge. Kann die folgenden Werte annehmen: Auto, Befehlsleiste, Keine, Oben, Unten.


Reis. 4. Suchzeichenfolge in einer dynamischen Liste

Wenn der Wert dieser Eigenschaft auf „Befehlsfeld“ festgelegt ist, wird die Suchzeichenfolge im Befehlsfeld des Formulars (wenn die dynamische Liste das Hauptformularattribut ist) oder im Befehlsfeld angezeigt, das der dynamischen Liste zugeordnet ist. Die in der Befehlsleiste platzierte Suchleiste wird immer an den rechten Rand der Befehlsleiste gedrückt (zusammen mit den Schaltflächen rechts neben der Suchleiste).
Wenn die Eigenschaft auf „Nein“ gesetzt ist, befindet sich die Suchzeichenfolge nicht im Formular und wenn Sie mit der Eingabe der Suchzeichenfolge beginnen, wird ein Dialogfeld geöffnet.
Wenn die Eigenschaft auf „Oben“ gesetzt ist, befindet sich die Suchleiste zwischen der Listenbefehlsleiste und der Tabelle, in der die dynamische Liste angezeigt wird. Wenn die Eigenschaft auf „Bottom“ gesetzt ist, wird die Suchzeichenfolge direkt nach der Tabelle mit der dynamischen Liste platziert.


● Wenn die Eigenschaft „Kompatibilitätsmodus“ auf „Nicht verwenden“ oder älter als Version 8.3.4 eingestellt ist, lautet der Wert „Befehlsfeld“.
Gehen Sie wie folgt in die Suchzeile:
● Durch Drücken der Tastenkombination Strg+F;
● Maus;
● Wenn Sie mit der Eingabe einer dynamischen Liste beginnen (unter Berücksichtigung des Werts der SearchOnTyping-Eigenschaft der dynamischen Liste).
● Ansichtsstatusposition – beschreibt, wo der Ansichtsstatus angezeigt wird: welche Felder durchsucht wurden und welche Werte
in allen Bereichen gesucht. Kann die folgenden Werte annehmen: Auto, Keine, Oben, Unten


Reis. 5. Suchstatus in dynamischer Liste

Wenn die Eigenschaft auf „Nein“ gesetzt ist, ist der Ansichtsstatus nicht im Formular vorhanden. Dadurch kann nur anhand der Verfügbarkeit der Schaltfläche „Suche abbrechen“ festgestellt werden, ob die Suche abgeschlossen wurde oder nicht.
Wenn die Eigenschaft auf „Oben“ gesetzt ist, befindet sich der Ansichtsstatus zwischen der Listenbefehlsleiste und der Tabelle, in der die dynamische Liste angezeigt wird. Wenn die Eigenschaft auf „Bottom“ festgelegt ist, wird der Ansichtsstatus unmittelbar nach der Tabelle platziert, in der die dynamische Liste angezeigt wird.
Wenn das Formular in 1C:Enterprise Version 8.3.4 und früher erstellt wurde, ist die Eigenschaft auf Nein gesetzt. Wenn das Formular in 1C:Enterprise Version 8.3.5 und älter erstellt wurde, ist die Eigenschaft auf Auto gesetzt. Der tatsächliche Wert der Immobilie wird in diesem Fall wie folgt ermittelt:
● Wenn die Eigenschaft „Kompatibilitätsmodus“ auf Version 8.3.4 (und niedriger) eingestellt ist – Wert „Nein“;
● Wenn die Eigenschaft „Kompatibilitätsmodus“ auf „Nicht verwenden“ oder älter als Version 8.3.4 eingestellt ist – Wert „Oben“;
● Suchsteuerungsposition – Legt fest, wo die Suchsteuerungsschaltfläche angezeigt wird. Die Schaltfläche öffnet ein Menü, das die folgenden Informationen enthält: Befehle Nach aktuellem Wert suchen, Erweiterte Suche, Suche abbrechen, Zeitraum festlegen (für Dokument- und Journallisten) und Suchabfrageverlauf (letzte 5 Abfragen). Die Eigenschaft kann die folgenden Werte annehmen: Auto, Keine, Befehlsfeld.


Reis. 6. Verwalten der Suche in einer dynamischen Liste

Wenn die Eigenschaft auf „Nein“ festgelegt ist, befindet sich die Suchsteuerungsschaltfläche nicht im Formular (die Befehle sind jedoch über das Menü „Mehr“ verfügbar). Der Eigenschaftswert „Befehlsleiste“ platziert eine Schaltfläche in der Befehlsleiste, die einer Tabelle zugeordnet ist, die eine dynamische Liste anzeigt.
Wenn das Formular in 1C:Enterprise Version 8.3.4 und früher erstellt wurde, ist die Eigenschaft auf Nein gesetzt. Wenn das Formular in 1C:Enterprise Version 8.3.5 und älter erstellt wurde, ist die Eigenschaft auf Auto gesetzt. Der tatsächliche Wert der Immobilie wird in diesem Fall wie folgt ermittelt:
● Wenn die Eigenschaft „Kompatibilitätsmodus“ auf Version 8.3.4 (und niedriger) eingestellt ist – Wert „Nein“;
● Wenn die Eigenschaft „Kompatibilitätsmodus“ auf „Nicht verwenden“ oder älter als Version 8.3.4 eingestellt ist, lautet der Wert „Befehlsfeld“.
Wenn in einem Formular mehrere Befehlsfelder vorhanden sind, deren Befehlsquelle eine Tabelle des verwalteten Formulars ist (Anzeige dynamischer Listendaten), befinden sich die Suchzeile und die Schaltfläche zur Suchsteuerung nur in einem Befehlsfeld:
● Oder in der Befehlsleiste der dynamischen Liste selbst (sofern die automatische Vervollständigung aktiviert ist)
● Oder in einem der übrigen Befehlsfelder.

Schauen wir uns die Funktionen der Suche in einer dynamischen Liste an:
● Um die Suche komfortabel (auch hinsichtlich der Performance) zu gestalten, müssen Sie die Volltextsuche für alle Konfigurationsobjekte aktivieren, die als Haupttabelle der dynamischen Liste verwendet werden können. Außerdem sollte die Volltextsuche alle Details zu Konfigurationsobjekten umfassen, die möglicherweise in einer dynamischen Liste angezeigt werden und nach denen möglicherweise eine Suche erforderlich ist.
Wenn ein Objekt von der Volltextsuche ausgeschlossen wird, funktioniert der entsprechende Suchmechanismus zwar, die Leistung einer solchen Suche ist jedoch äußerst gering. Es wird nicht empfohlen, die Suche für Objekte zu verwenden, die nicht durch die Volltextsuche indiziert sind.
● Die Anwendungslösung muss über eine Routineaufgabe verfügen, die den Volltextsuchindex regelmäßig aktualisiert.

● Die Suche erfolgt nicht über alle Spalten der dynamischen Liste (und des Konfigurationsobjekts), sondern nur über die Spalten, die in der Tabelle angezeigt werden.
● Die Suche in einer dynamischen Liste nach Feldern von Referenztypen mit willkürlicher Darstellung erfolgt nach Feldern, die für verwendet werden
Repräsentationsbildung (siehe hier). Die in der Ansicht enthaltenen Felder werden unter Berücksichtigung des ViewFieldGettingProcessing()-Handlers des entsprechenden Objekts ermittelt.
● Bei dynamischen Listen mit einer angegebenen Haupttabelle wird die Volltextsuche in der Haupttabelle verwendet. Alle nicht indizierten Links aus der Haupttabelle werden zu den Ergebnissen der Volltextsuche hinzugefügt. Das Ergebnis einer Volltextsuche für die Haupttabelle wird als Auswahl anhand von Schlüsselfeldern verwendet. Eine Volltextsuche wird auch für in der Liste angezeigte Felder aus anderen Tabellen durchgeführt (sofern das Feld und das Konfigurationsobjekt die Volltextsuche verwenden). Ohne aktivierte Volltextsuche sind möglicherweise Daten vorhanden
gefunden, aber die Suche selbst wird sehr langsam sein.
Wenn beim Versuch, eine Volltextsuche durchzuführen, ein Fehler auftritt, wird die Suche ohne Anwendung der Volltextsuche durchgeführt.
Dies kann beispielsweise passieren, wenn in der Informationsdatenbank nach einem Buchstaben und einer großen Anzahl von Zeilen gesucht wird, die mit diesem Buchstaben beginnen.
● Wenn für ein Feld in der Haupttabelle einer dynamischen Liste eine Auswahl mit dem Vergleichstyp Gleich verwendet wird, wird bei der Durchführung einer Volltextsuche ein Auswahlwert zur Suchabfrage für diese Tabelle hinzugefügt.
● Die Suchzeichenfolge wird in Wörter aufgeteilt. Diese Partitionierung erfolgt nach folgenden Regeln:
● Die Zeile wird mit Leerzeichen und Tabulatorzeichen als Trennzeichen umbrochen.
● Dann wird jedes resultierende Fragment verarbeitet:
● Wenn das Fragment eine Datumsdarstellung (mit oder ohne Zeit) basierend auf dem aktuellen Sitzungsgebietsschema ist, dann ist das Wort das Fragment.
● Andernfalls wird das Fragment weiter aufgeteilt, wobei die Zeichen „,.-/\“ als Trennzeichen verwendet werden. In diesem Fall wird jedes resultierende Zeichenfolgenfragment als Wort betrachtet.

● Für jedes Wort wird ein eigener Satz von Bedingungen gebildet, die „durch ODER“ verknüpft werden. Dieser Satz von Bedingungen wird generiert, wenn eine Volltextsuche nach einem bestimmten Wort in der Tabelle, aus der dieses Feld abgerufen wurde, mindestens ein Objekt ergab oder für dieses Feld keine Volltextsuche verwendet wurde. Die Bedingungen werden wie folgt gebildet:
● Für ein Feld vom Typ String lautet die Bedingung FieldName LIKE %Word%.
● Für ein Feld vom Typ „Zahl“ hat die Bedingung die Form „Feldname=Wert“, wobei „Wert“ ein in den Typ „Zahl“ konvertiertes Wort ist. Wenn die Umwandlung nicht durchgeführt werden kann, wird die Feldsuche nicht durchgeführt.
● Das Wort wird als Teilzeichenfolge in der für die aktuelle Sitzung definierten booleschen Standarddarstellung nachgeschlagen. Wenn das Suchwort in einer Ansicht gefunden wird, wird nach dem Wert gesucht, der der Ansicht entspricht, in der das Wort gefunden wurde. In diesem Fall werden bei der Suche keine Ansichten verwendet, die über die Formularelementeigenschaft Format angegeben werden.
● Für ein Feld vom Typ „Datum“ sieht die Bedingung wie folgt aus: FieldName>=StartofDay(Word) ANDFieldName<=КонецДня(Слово). Если Слово подобно дате, в которой год
Wird eine ein- oder zweistellige Zahl angegeben, wird das Jahr auf das aktuelle Jahrhundert reduziert und dieser Wert zur Suchbedingung hinzugefügt.
● Bei Referenzfeldern wird eine Suche nach den Feldern durchgeführt, die zur Bildung der Referenzansicht verwendet werden. Suchen Sie in jedem dieser Felder
nach den oben beschriebenen Regeln durchgeführt. Die Suche verwendet keine Felder, die zur Bildung einer benutzerdefinierten Datendarstellung verwendet werden.
Die Bedingungen für jedes Wort werden mit „UND“ verknüpft.
● Bei Werten mit führenden Nullen können Sie entweder nach der Zeichenfolge mit führenden Nullen oder nach der angegebenen Zeichenfolge ohne führende Nullen suchen.
● Wenn eine dynamische Liste eine Liste von Dokumenten oder einen Dokumentverlauf anzeigt, wird das von Ihnen angegebene Listenansichtsintervall auch in dem Bereich des Formulars angezeigt, der für die Anzeige des Ansichtsstatus für die gewünschte dynamische Liste reserviert ist.
● Der Befehl „Suche nach aktuellem Wert“ ist nicht verfügbar, wenn die Haupttabelle der dynamischen Liste das Auswahlkriterium ist.
● Gefundene Zeichenfolgenfragmente werden bei der Anzeige in der Tabelle hervorgehoben.
● Für eine Spalte wird nur eine Suchzeichenfolge unterstützt. Beim Hinzufügen einer neuen Suchabfrage für eine Spalte, die bereits durchsucht wird, wird der Suchausdruck ersetzt und nicht die beiden Suchabfragen addiert.
● Wenn das Formular nicht über einen Formularelementzusatz des Formulars Suchzeichenfolgenanzeige verfügt, der mit der Tabelle verknüpft ist (Quelleigenschaft des Formularelementzusatzes), der eine dynamische Liste anzeigt, dann wird durch Drücken der Tastenkombination Strg+F der Suchdialog geöffnet.


Reis. 7. Suchdialog

Wenn das Formular einen Formularelementzusatz der Form Suchzeichenfolgenanzeige enthält, der mit einer Tabelle verknüpft ist (Quelleigenschaften des Formularelementzusatzes), die eine dynamische Liste anzeigt, sollten Sie zum Öffnen des Suchdialogs den Befehl „Erweiterte Suche“ verwenden.
● Beachten Sie bei der Verwendung des Suchdialogs folgende Punkte:
● Wenn Sie das Suchdialogfeld über eine Tastenkombination öffnen, wird der Wert der aktuellen Zelle in der Zeile „Was soll durchsucht“ angezeigt und der Wert des Schalters „Wie soll gesucht werden“ wird auf „Nach exakter Übereinstimmung“ gesetzt.

● Das Öffnen des Suchdialogs durch direktes Eingeben einer Suchzeichenfolge in die dynamische Liste führt dazu, dass der Wert des Schalters „Suchen“ auf den Wert „Nach Teil der Zeichenfolge“ gesetzt wird und der eingegebene Text im Feld „Was“ landet zum Suchfeld.

6. Anzeige der Daten durch eine dynamische Liste

Wenn Sie dynamische Listen verwenden, müssen Sie unter Berücksichtigung der angewendeten Auswahlen und Suchvorgänge möglicherweise verschiedene Aktionen für die aktuell von der dynamischen Liste angezeigten Daten ausführen. Zu diesen Aktionen gehören: Verarbeiten der angezeigten Informationen, beispielsweise das erneute Senden ausgewählter Dokumente oder das Festlegen einiger Details für ausgewählte Objekte, das Erstellen einer Liste verfügbarer Objekte (mit Design usw.), beispielsweise zum Drucken oder Speichern in einem Tabellenkalkulationsdokument.
Um Daten zu erhalten, die in einer dynamischen Liste angezeigt werden, sollten Sie GetExecutableDataCompositionSchema() und verwenden
GetExecutableDataCompositionSettings().
Beispiel für den Datenempfang:

Schema = Elements.List.GetExecutableDataCompositionSchema();
Settings = Items.List.GetExecutableDataCompositionSettings();
LayoutLinker = newDataCompositionLayoutLinker();
LayoutLayout = LayoutComposer.Execute(Schema, Einstellungen);
CompositionProcessor = newDataCompositionProcessor;
LayoutProcessor.Initialize(LayoutLayout);
OutputProcessor = New OutputProcessorDataCompositionResultInTabularDocument;
ReturnOutputProcessor.Output(CompositionProcessor);

Das Einfügen von Daten in eine Wertesammlung (Tabelle oder Werteliste) erfolgt auf die gleiche Weise.
Das Erhalten dynamischer Listendaten auf diese Weise weist eine Reihe von Merkmalen auf, die bei der Entwicklung von Anwendungslösungen berücksichtigt werden müssen:
● Das folgende Tabellendesign wird nicht unterstützt:
● Abwechselnde Linienfarben;
● Headerbild;
● Bild des Kellers;
● Hintergrundfarbe der Fußzeile;
● Farbe des Fußzeilentextes;
● Fußzeilenschriftart;
● Horizontale Lage im Keller;
● Passwortmodus.
● Das für ein verwaltetes Formular angegebene bedingte Erscheinungsbild wird nicht unterstützt.
● Wenn Sie eine hierarchische Tabelle in aufsteigender Reihenfolge nach einem Feld vom Typ Link ordnen, werden Datensätze, die einen leeren Link enthalten, immer zuerst platziert.

Bei der Finalisierung von Konfigurationen stößt jeder 1C-Programmierer auf dynamische Listen.
Eine dynamische Liste ist ein Schnittstellenobjekt, das zur Anzeige verschiedener Listen von Datenbankobjekten oder Nicht-Objekt-Daten – Registereinträgen – verwendet wird.
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. Schauen wir uns seine Eigenschaften an und sehen, was sich darin befindet.
Wir interessieren uns für die Eigenschaft „Benutzerdefinierte Anfrage“. Wenn Sie es aktivieren, werden uns alle Funktionen einer dynamischen Liste angezeigt. Wir werden in der Lage sein, eine Anfrage mit fast allen Funktionen der 1C: Enterprise-Systemabfragesprache zu schreiben. Aktivieren Sie das Kontrollkästchen und klicken Sie auf den Link „Öffnen“:

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


Als Haupttabelle wählen wir „Directory.Nomenclature“. Dadurch können wir mit einer dynamischen Liste wie mit einer Nomenklaturliste arbeiten – Verzeichniselemente hinzufügen, ändern und zum Löschen markieren. Außerdem ermöglicht die Installation der Haupttabelle das dynamische Auslesen von Daten – das bedeutet, dass die Auswahl je nach Bedarf portionsweise erfolgt.
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 dies zu beseitigen, müssen Sie einen Wert für den Parameter „Periode“ festlegen. Dazu können Sie die Methode „SetParameterValue“ der Sammlung „Parameters“ der dynamischen Liste verwenden. Die Methode benötigt zwei Parameter:
. „Parameter“ – Typ: String; DataCompositionParameter. Der Name des Parameters oder Datenzusammensetzungsparameters, dessen Wert Sie festlegen möchten;
. „Wert“ – Typ: Beliebig. Der festzulegende Wert.
Kann im „OnCreateOnServer“-Handler des Formulars aufgerufen werden:

Sie haben eine Frage oder benötigen Hilfe von einem Berater?


Wir bieten dem Benutzer die Möglichkeit, den Zeitraum für den Erhalt von Guthaben zu ändern. Fügen Sie dazu das Attribut und das damit verbundene Formularelement „Datum“ hinzu:


Im Handler „OnChange“ des Formularelements „Date“ rufen wir die Methode „SetParameterValue“ auf und übergeben als Wert den Wert des zugehörigen Attributs. Auf ähnliche Weise ändern wir das Verfahren „Beim Erstellen auf dem Server“ des Formulars. Da die Methode auf dem Client verfügbar ist, ist kein Aufruf des Servers erforderlich:


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




Nehmen wir an, dass Benutzer entweder aktuelle Salden oder geplante Einnahmen sehen möchten. Betrachten wir eine der Implementierungsoptionen. Fügen wir ein Formularattribut vom Typ Boolean und einen zugehörigen Schalter hinzu:


Wenn Sie den Wert des Schalters ändern, ändern wir den Text der Anfrage. Dazu nutzen wir den Eventhandler „On Change“ für das Formularelement „Display Quantity On Receipt“. 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, muss eine Serverprozedur aufgerufen werden:


Ergebnis der vorgenommenen Änderungen:



Endlich ist der Traum eines jeden Siebenjährigen wahr geworden. Wie oft haben Benutzer des Programms 7.7 nach einer normalen Auswahl an Artikeln gefragt? Damit Sie Salden, Preise sehen und Filter einstellen können. Wir mussten uns verschiedene Tricks einfallen lassen, unter anderem das 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 bieten können.

Nehmen wir als Grundlage eine bestimmte Testkonfiguration von 1C: „Enterprise Accounting 3.0“. Wir werden jetzt keine Auswahl treffen, sondern einfach ein weiteres Auswahlformular im Verzeichnis „Nomenklatur“ hinzufügen und es vorübergehend zum Hauptformular machen:

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

Schauen wir uns seine Eigenschaften an und sehen, was sich darin befindet.

Zunächst interessiert uns die Checkbox „Individuelle Anfrage“. Dadurch werden uns alle Vorteile einer dynamischen Liste offenbart. Wir werden die Möglichkeit haben, unsere eigene Anfrage mit Parametern zu schreiben. Aktivieren Sie das Kontrollkästchen und klicken Sie auf den Link „Öffnen“:

Es öffnet sich ein Fenster mit dem fertigen Code. Vorerst werden dort lediglich alle Felder des Verzeichnisses „Nomenklatur“ aufgelistet.

Holen Sie sich 267 Video-Lektionen zu 1C kostenlos:

Wie Sie sehen, gibt es einen Aufruf-Button „ “ und eine Checkbox, die es ermöglicht, den Inhalt der Liste dynamisch zu ändern. Das heißt, wenn ein anderer Benutzer etwas im Verzeichnis ändert, ändert sich dies auch in unserer Liste. Darüber hinaus gibt es einen Reiter „Einstellungen“, auf den wir aber später eingehen.

Benutzerdefinierte Abfrage in dynamischer Liste

Erstellen wir zunächst die benötigte Anfrage mit Salden und Preisen. Ungefähr so:

Registerkarte „Einstellungen“.

Und jetzt das Beste! Gehen Sie zur Registerkarte „Einstellungen“. Und wir sehen sofort, dass wir auf der ersten Registerkarte beliebige Auswahlen für jedes Feld in der Anfrage treffen können:

Programmgesteuertes Festlegen von Abfrageparametern in einer dynamischen Liste 1C 8.3

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

Schreiben wir diese Parameter in die Formularparameter und fügen die folgenden Zeilen im Formularmodul hinzu:

&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing) Liste. Optionen. SetParameterValue("Period" , Parameters. Date) ; Aufführen. Optionen. SetParameterValue("PriceType", Parameters.PriceType) ; Ende des Verfahrens