1c Datenspeicher temporärer Speicher. Zwischenlagerung. Wie heißen sie?

In einem Wertspeicher können nahezu alle Informationen gespeichert werden, z.B.

... Bilder (Fotos):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types zusätzlicher Informationen von Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// an dieser Stelle wird alles angezeigt... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...Tabellendokument:

TabDoc=Neues tabellarisches Dokument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Schreiben();

Ende des Verfahrens

Prozedur RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Wenn TabDoc<>Undefiniert ThenFormElements.TabularDocumentField1.Output(TabDoc); endIf;

Ende des Verfahrens

...beliebige Dateien (Binärdaten):

XZ = NewValueStorage(NewBinaryData(file));

Eight unterstützt die Komprimierung der im Speicher abgelegten Daten:

XZ = NewValueStorage(NewBinaryData(file),NewDataCompression(9));

... externe Verarbeitung und Berichterstattung:

Prozedur LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 Maximum PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Komprimierungsrate));

Ende des Verfahrens

Prozedur StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(TemporaryFileName); ExternalProcessing = ExternalProcessing.Create(TemporaryFileName); ExternalProcessing.GetForm().Open();

Ende des Verfahrens

Arbeiten mit Speicher

Wenn es sich um Binärdaten handelte, können diese mit der Get-Methode aus dem Wertespeicher wiederhergestellt und mit der Write()-Methode in eine Datei geschrieben werden.

Wenn TypeValue(Storage)<>Typ("BinaryData") Dann

BinaryData = Storage.Get();

BinaryData = Speicher;

endIf; BinaryData.Write(FileName);

Handelt es sich beispielsweise um ein Word-Dokument (Doc-Datei oder anderer registrierter Dateityp), dann kann es wie folgt geöffnet werden:

LaunchApplication(Dateiname);

Um ein Feld vom Typ „Wertspeicher“ zu löschen, müssen Sie es „Undefiniert“ zuweisen:

PropsStorage = Undefiniert;

Arbeiten mit Dateien und Bildern in der integrierten Sprache 1C:Enterprise 8

Zweck

Die verwaltete Anwendung implementiert einen neuen Mechanismus zum Arbeiten mit Dateien. Es ermöglicht den Dateiaustausch zwischen der Infobase und der Client-Anwendung. Die Besonderheit dieses Mechanismus besteht darin, dass er für den Einsatz in einem Thin Client und einem Webclient konzipiert ist und die durch Webbrowser auferlegten Einschränkungen bei der Arbeit mit Dateien berücksichtigt.

Bei dem Mechanismus handelt es sich um eine Reihe von Methoden, mit denen lokal auf dem Computer des Benutzers gespeicherte Daten in einem temporären Speicher der Informationsdatenbank abgelegt, diese Informationen aus dem temporären Speicher in die Datenbank übertragen und wieder an den Computer des Benutzers gesendet werden können. Die häufigsten Anwendungsprobleme, die durch diesen Mechanismus gelöst werden, sind die Speicherung begleitender Informationen, beispielsweise Bilder von Waren, Dokumente zu Verträgen usw.

Methodenumfang

Zwischenlagerung

Die temporäre Speicherung ist ein spezieller Bereich der Informationsbasis, in dem Binärdaten abgelegt werden können. Der Hauptzweck besteht darin, Informationen während der Client-Server-Interaktion vorübergehend zu speichern, bevor sie in die Datenbank übertragen werden.

Die Notwendigkeit einer temporären Speicherung entsteht, weil das Betriebsmodell des Webbrowsers erfordert, dass die vom Benutzer ausgewählte Datei direkt auf den Server übertragen wird, ohne dass die Möglichkeit besteht, sie auf dem Client zu speichern. Bei der Übertragung einer Datei wird diese im temporären Speicher abgelegt und kann dann beim Schreiben eines Objekts in die Datenbank verwendet werden.

Die typischste Anwendungsaufgabe, die durch temporäre Speicherung gelöst wird, ist die Bereitstellung des Zugriffs auf Dateien oder Bilder, bevor das Objekt beispielsweise in Form eines Elements in der Informationsbasis erfasst wird.

Eine im Speicher abgelegte Datei oder Binärdaten wird durch eine eindeutige Adresse identifiziert, die später für Schreib-, Lese- oder Löschvorgänge verwendet werden kann. Diese Adresse wird von Methoden zum Schreiben einer Datei in den temporären Speicher angegeben. Mit einer separaten Methode in der integrierten Sprache können Sie feststellen, ob es sich bei der übergebenen Adresse um eine Adresse handelt, die auf Daten im temporären Speicher verweist.

Informationsbasis

Der Mechanismus ermöglicht den Zugriff auf Binärdaten, die in Attributen des Typs „Value Storage“ gespeichert sind.

Wie bei der vorübergehenden Speicherung ist der Zugriff auf Informationen über eine spezielle Adresse möglich. Sie können es über eine spezielle Methode erhalten, indem Sie einen Link zu einem Objekt oder einen Eintragsschlüssel für ein Informationsregister sowie den Namen des Attributs übergeben. Bei einem tabellarischen Teil ist zusätzlich die Übergabe des Zeilenindex des tabellarischen Teils erforderlich.

Methoden zum Arbeiten mit Dateien unterliegen beim Arbeiten mit Infobase-Details Einschränkungen. Für sie steht im Gegensatz zur temporären Speicherung nur das Lesen von Informationen zur Verfügung, nicht jedoch das Schreiben oder Löschen.

Beschreibung der Methoden zum Arbeiten mit Dateien

Daten im temporären Speicher speichern

Das typischste Szenario für die Verwendung dieses Mechanismus besteht darin, Benutzerdaten zunächst im temporären Speicher abzulegen. Hierfür gibt es zwei Methoden: PlaceFile() und PlaceFileInTemporaryStorage().

Die erste Methode, PlaceFile(), platziert eine Datei aus dem lokalen Dateisystem im temporären Speicher. Die Methode kann eine Zieladresse im Speicher akzeptieren. Wenn es nicht definiert ist oder eine leere Zeichenfolge ist, wird eine neue Datei erstellt und die Methode gibt ihre Adresse über den entsprechenden Parameter zurück.

Wenn der Parameter, der den interaktiven Betriebsmodus bestimmt, True ist, zeigt die Methode ein Standarddialogfeld zur Dateiauswahl an, in dem Sie eine Datei auswählen können, die im Speicher abgelegt werden soll. In diesem Fall gibt die Methode auch die Adresse der ausgewählten Datei zurück.

Infolgedessen gibt die Methode „False“ zurück, wenn der Benutzer interaktiv die Ausführung einer Operation im Dateiauswahldialog abgelehnt hat. Die Methode ist nur auf dem Client verfügbar.

Die zweite Methode, PlaceFileInTemporaryStorage(), ähnelt der vorherigen, außer dass sie auf dem Server verfügbar ist und die in den temporären Speicher zu schreibenden Daten nicht als Pfad im Dateisystem, sondern als Typvariable dargestellt werden Binärdaten. Wenn keine Zieladresse angegeben wird, wird ebenfalls eine neue Datei im Speicher erstellt. Seine Adresse wird als Ergebnis der Funktion zurückgegeben.

Abrufen einer Datei aus dem temporären Speicher

Wenn Sie ein Objekt in die Infobase schreiben, müssen Sie möglicherweise Daten aus dem temporären Speicher extrahieren und beispielsweise in einem Attribut ablegen. Hierfür gibt es eine entsprechende Servermethode – GetFileFromTemporaryStorage(). Diese Methode ruft Daten aus dem temporären Speicher ab und gibt sie als Ergebnis zurück. Dazu müssen Sie die Adresse im temporären Speicher angeben. Diese Adresse wird von den oben beschriebenen Methoden PlaceFile() und PlaceFileInTemporaryStorage() zurückgegeben, wenn diese erfolgreich ausgeführt werden.

Löschen einer Datei aus dem temporären Speicher

Nachdem die Daten in den Details gespeichert wurden, kann die Datei im temporären Speicher gelöscht werden. Zu diesem Zweck gibt es eine Methode DeleteFileFromTemporaryStorage(), die eine Datei aus dem temporären Speicher löscht. Die Methode verwendet als Parameter die Adresse einer Datei im temporären Speicher. Verfügbar auf dem Server.

Überprüfung der Adresse zur Zwischenspeicherung

Die Dateiadresse kann sowohl die temporäre Speicherung als auch Details in der Infobase angeben. Um seinen Typ zu überprüfen, gibt es die Methode This isTemporaryStorageAddress().

Es prüft, ob es sich bei der übergebenen Adresse um eine Adresse handelt, die auf den Store verweist. Gibt „True“ zurück, wenn die Adresse auf temporären Speicher verweist. Die Methode ist auf dem Server verfügbar.

Erhalt der Requisitenadresse

Nachdem die Daten in den Details der Infobase abgelegt wurden, müssen Sie möglicherweise über Dateimethoden darauf zugreifen.

Doch bevor Sie Daten, beispielsweise von einer Immobilie, erhalten, müssen Sie die Adresse dieser Immobilie erfahren. Zu diesem Zweck gibt es eine Methode GetFileAddressInInformationBase().

Sein Zweck besteht darin, die Dateiadresse in der Infobase gemäß den ursprünglichen Parametern zurückzugeben. Dazu müssen Sie den Objektschlüssel (dies kann entweder ein Link zum Objekt oder ein Informationsregistereintragsschlüssel sein) und den Namen des Attributs übergeben. Wenn Sie die Adresse einer Datei abrufen müssen, die in einem tabellarischen Teilattribut gespeichert ist, müssen Sie vor dem Attributnamen im Parameter, der den Attributnamen angibt, den Namen des tabellarischen Teils und einen Punkt „.“ hinzufügen. Die Methode ist sowohl auf dem Client als auch auf dem Server verfügbar.

Abrufen einer Datei aus der Infobase

Die Methode GetFile() empfängt eine Datei aus der Infobase und speichert sie im lokalen Dateisystem des Benutzers. Der erste Parameter gibt die Adresse der Datei in den Requisiten oder im temporären Dateispeicher an. Der zweite Parameter gibt den Zielspeicherort der resultierenden Datei an. Im nicht interaktiven Modus müssen Sie den Pfad angeben. Im interaktiven Modus ist der Parameter optional.

Standardmäßig wird die Methode im interaktiven Modus ausgeführt, d. h. der letzte Parameter ist True. Dies bedeutet, dass ein Dialogfeld angezeigt wird, in dem Sie eine Aktion mit der empfangenen Datei festlegen können: sie ausführen oder an einem vom Benutzer angegebenen Speicherort speichern. Wenn der interaktive Modus aktiv ist und der Parameter Dateipfad des Zieldatenträgers nicht angegeben ist, ist der Vorgang zum Öffnen der Datei nicht verfügbar. Gibt einen booleschen Wert zurück. Falsch bedeutet, dass der Benutzer den Vorgang im interaktiven Dialogfeld zum Speichern der Datei abgebrochen hat.

Beispiel für die Verwendung von Dateimethoden

// Empfangen einer Datei von der Festplatte im interaktiven Modus // und Ablegen im temporären Speicher &Auf der Client-Prozedur SelectDiskFileAndWrite()

Variable SelectedName; VariableTemporaryStorageAddress; If PutFile(TemporaryStorageAddress, SelectedName, True) Then Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); endIf;

Ende des Verfahrens

// Kopieren einer Datei aus dem temporären Speicher in ein Verzeichnis // Attribut, Aufzeichnen eines Objekts, Löschen einer Datei aus dem temporären Speicher // &Auf dem Server Verfahren Objektdatei platzieren (temporäre Speicheradresse)

Verzeichniselement = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Neue Datei(DirectoryItem.FileName); Directory Item.FileName = FilePathOnDisk.Name; Verzeichniselement.Write(); Geändert = Falsch; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueFormAttributes(Directory Element, "Object");

Ende des Verfahrens

// Eine Datei aus den Requisiten lesen und // auf der lokalen Festplatte im interaktiven Modus speichern &Auf der Client-Prozedur ReadFileAndSaveToDisk()

Address = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Address, Object.FileName, True);

Ende des Verfahrens

Unterstützung für Adressen im Bildfeld

Das Bildfeld-Steuerelement unterstützt die Anzeige eines Bildes, das durch die Adresse einer Datei im temporären Speicher oder in einer Datenbank angegeben wird.

Dazu müssen Sie in der Data-Eigenschaft des Formularelements ein String-Typ-Attribut festlegen. Der Wert dieses Attributs wird als Adresse des Bildes interpretiert.

Beispiel // Binden des Bildfelds an die Bildadresse im temporären // Speicher. AddressPictures bilden Details vom Typ String

PlaceFile(PictureAddress,True)

Picture.Data = AddressPictures

Einschränkungen beim Arbeiten mit dem Web-Client

Die Funktionsweise des beschriebenen Mechanismus bei Verwendung des Webclients weist einige Einschränkungen auf. Diese Einschränkungen hängen mit dem Sicherheitsmodell des Browsers zusammen. So kann der Client beispielsweise eine Datei nicht selbstständig im lokalen Dateisystem speichern, d. h. es steht nur die interaktive Version der Client-Methoden PlaceFile() und GetFile() zur Verfügung. Beim Versuch, den nicht interaktiven Modus zu verwenden, wird eine Ausnahme ausgelöst. Die interaktiv angezeigten Dialogfelder sind spezifisch für Ihren Browsertyp.

Funktionen beim Arbeiten mit Value Storage auf dem Client

Problem:

Wenn ein Dokument im tabellarischen Abschnitt über ein Attribut vom Typ „Wertspeicherung“ verfügt, verlangsamt es das Öffnen des Dokumentformulars, wenn dieses Attribut große Datenmengen enthält.

Vermuteter Grund:

Möglicherweise wird beim Öffnen eines Formulars nicht der Link zu den im Value Store befindlichen Daten an den Kunden gesendet, sondern die Daten selbst.

Lösung

  • In den Eigenschaften des Tabellenattributs des Formulars gibt es ein Flag „Immer verwenden“. Wenn es gesetzt ist, wird der Inhalt des Feldes immer zwischen dem Server und dem Client übertragen – beispielsweise beim Öffnen eines Formulars. Dieses Flag muss deaktiviert sein, dies muss jedoch im Code berücksichtigt werden, da auf dem Client standardmäßig kein Wert für dieses Feld vorhanden ist. Ein Beispiel finden Sie in 1C:Archive.

Es ist sogar noch besser zu verwenden Zwischenlagerung um Dateien zwischen Client und Server zu übertragen.

Material aktualisiert, um Drupal 8.7.0+ zu entsprechen

Temporärer Speicher(temporäre Speicherung) – ermöglicht Ihnen die vorübergehende Speicherung beliebiger Daten. Hierbei handelt es sich um eine Art Datenspeicher in $_SESSION, da dieser Speicher in der Regel einem bestimmten Benutzer zugeordnet ist. Aber es verwendet $_SESSION nicht und speichert alles im System (in der Datenbank).

Der Kern verfügt über zwei Dienste zur temporären Speicherung: tempstore.private und tempstore.shared. Sie funktionieren identisch, aber Private speichert immer Daten für einen bestimmten Benutzer. Das heißt, wenn ein Schlüssel aus einem privaten Speicher aufgerufen wird, werden für jeden Benutzer unterschiedliche Daten zurückgegeben. Shared ist für jeden Benutzer zugänglich.

Der Anwendungsbereich dieser Dienste und ihrer Speicherung kann sehr groß sein. Speichern Sie beispielsweise einige temporäre Werte von Formularen. Wenn der Benutzer sie nicht gespeichert hat, können sie beispielsweise für einige REST-Formulare aus diesem Speicher wiederhergestellt werden und sind sogar für reguläre Formulare geeignet. Im Allgemeinen, wofür Sie genug Fantasie oder Aufgaben haben. Dies kann beispielsweise für einige Formulare verwendet werden, die außerhalb von Drupal gesteuert werden, beispielsweise in React oder Vue.

Werte in diesen Speichern bleiben standardmäßig 604800 Sekunden (1 Woche) bestehen und werden danach automatisch gelöscht.

Um diesen Wert zu ändern. Sie müssen beispielsweise „sites/default/services.yml“ verbinden und neu definieren:

Parameter: # 10 Sekunden tempstore.expire: 10

Aber das sollte aus gutem Grund nicht passieren.

Schauen wir uns die Fähigkeiten der einzelnen Speichergeräte an. Obwohl sie ähnlich sind, unterscheiden sie sich geringfügig.

tempstore.private – privater Speicher

Dieser Speicher ist für jeden Benutzer privat.

tempstore.shared – gemeinsam genutzter Speicher

Dieser Speicher wird gemeinsam genutzt und kann Daten enthalten, die allen Benutzern gemeinsam sind.

Das Repository verfügt über die folgenden Methoden:

  • get($key) : Ruft einen Wert anhand seines Schlüssels aus dem Speicher ab. Wenn keine Daten vorhanden sind, wird NULL zurückgegeben, wenn vorhanden, wird ein Wert zurückgegeben.
  • getIfOwner($key) : Ruft einen Wert anhand seines Schlüssels aus dem Speicher ab. Wenn keine Daten vorhanden sind oder die Daten nicht unter dem aktuellen Benutzer geschrieben wurden, wird NULL zurückgegeben. Wenn Daten vorhanden sind und unter dem aktuellen Benutzer geschrieben wurden, wird der Wert zurückgegeben.
  • setIfNotExists($key, $value) : Schreibt den Wert $value unter dem Schlüssel $key nur dann in den Speicher, wenn derzeit keine Daten für diesen Schlüssel vorhanden sind. Gibt TRUE zurück, wenn Daten aufgezeichnet wurden, FALSE, wenn Daten bereits aufgezeichnet wurden.
  • setIfOwner($key, $value) : Schreibt den Wert $value unter dem Schlüssel $key nur dann in den Speicher, wenn derzeit keine Daten vorhanden sind oder der Eigentümer der tatsächlichen Daten der aktuelle Benutzer ist.
  • set($key, $value) : Schreibt den Wert $value unter dem Schlüssel $key in den Speicher.
  • getMetadata($key) : Gibt Metadaten für einen bestimmten $key zurück, ohne Daten. Dies ist ein Objekt, das die Eigentümereigenschaft enthält, die den Wert speichert, wem der Wert gehört, und die aktualisierte Eigenschaft – den Unix-Zeitstempel des Zeitpunkts, zu dem dieser Wert geschrieben wurde.
  • delete($key) : Löscht Daten, die mit dem angegebenen $key verknüpft sind, aus dem Speicher.
  • deleteIfOwner($key) : Löscht Daten, die mit dem angegebenen $key verknüpft sind, nur dann aus dem Speicher, wenn die Daten dem aktuellen Benutzer gehören.

Wie heißen sie?

Kleine Beispiele, wie man sie nennt.

Der erste Schritt besteht darin, den temporären Speicher des erforderlichen Speichers zu erhalten. Anschließend wird aus dem Speicher eine „Sammlung“ abgerufen, in der die Daten bereits unter den erforderlichen Schlüsseln gespeichert sind. In der Regel ist der Name der „Sammlung“ gleich dem Namen des Moduls.

Verwenden Sie Drupal\Core\TempStore\PrivateTempStoreFactory; verwenden Sie Drupal\Core\TempStore\SharedTempStoreFactory; /** @var PrivateTempStoreFactory $private_tempstore */ $private_tempstore = \Drupal::service("tempstore.private"); $my_private_storage = $private_tempstore->get("dummy"); $my_private_storage->set("Benutzername", "Drupal"); /** @var SharedTempStoreFactory $shared_tempstore */ $shared_tempstore = \Drupal::service("tempstore.shared"); $my_shared_storage = $shared_tempstore->get("dummy"); $my_shared_storage->set("Benutzername", "Drupal");

Beispiel

Im Beispiel erstellen wir ein Formular auf der Seite /temp-store-form mit zwei Feldern, von denen eines die Nachricht im privaten Speicher und das andere im öffentlichen Speicher speichert.

Erstellen Sie ein Formular:

Src/FormWithTempStore.php

privateTempStore = $private_temp_store->get("dummy"); $this->sharedTempStore = $shared_temp_store->get("dummy"); ) /** * (@inheritdoc) */ öffentliche statische Funktion create(ContainerInterface $container) ( return new static($container->get("tempstore.private"), $container->get("tempstore.shared") ); ) /** * (@inheritdoc) */ öffentliche Funktion getFormId() ( return "form_with_temp_store"; ) /** * (@inheritdoc) */ öffentliche Funktion buildForm(array $form, FormStateInterface $form_state) ( $form ["private_message"] = [ "#type" => "textarea", "#title" => $this->t("Private message"), "#required" => TRUE, "#description" => $ this->t("Dieser Wert ist für jeden Benutzer privat."), "#default_value" => $this->privateTempStore->get("message"), ]; $form["shared_message"] = [ " #type" => "textarea", "#title" => $this->t("Shared message"), "#required" => TRUE, "#description" => $this->t("This value wird für alle Benutzer freigegeben."), "#default_value" => $this->sharedTempStore->get("message"), ]; $form["actions"] = ["#type" => "actions" ]; $form["actions"]["submit"] = [ "#type" => "submit", "#value" => $this->t("Save"), ]; return $form; ) /** * (@inheritdoc) */ öffentliche Funktion subscribeForm(array &$form, FormStateInterface $form_state) ( $this->privateTempStore->set("message", $form_state->getValue("private_message")); $this->sharedTempStore->set("message", $form_state->getValue("shared_message")); ) )

Drucken (Strg+P)

1C:Enterprise verfügt über einen Mechanismus zum Arbeiten mit temporärem Speicher, der die Speicherung einiger sitzungsbezogener Daten ermöglicht.
Darüber hinaus wurde ein Mechanismus zum Arbeiten mit Dateien implementiert, der den Austausch von Dateien zwischen der Infobase und der Client-Anwendung gewährleistet. Die Besonderheit dieses Mechanismus besteht darin, dass er für den Einsatz in einem Thin Client und einem Webclient konzipiert ist und die durch Webbrowser auferlegten Einschränkungen bei der Arbeit mit Dateien berücksichtigt.

Zwischenlagerung

Dabei handelt es sich um einen speziellen Informationsspeicher, in den ein Wert eingegeben werden kann. Der Hauptzweck besteht darin, Informationen während der Client-Server-Interaktion vorübergehend zu speichern, bevor sie in die Datenbank übertragen werden. Der temporäre Speichermechanismus stellt zusammen mit dem Dateiverwaltungsmechanismus einen Satz bereit, mit dem lokal auf dem Computer des Benutzers gespeicherte Daten im temporären Speicher der Informationsbasis abgelegt, diese Informationen vom temporären Speicher in die Datenbank übertragen und abgerufen werden können es zurück auf den Computer des Benutzers. Die häufigsten Anwendungsprobleme, die durch diese Mechanismen gelöst werden, sind die Speicherung begleitender Informationen, zum Beispiel Bilder von Waren, Dokumente zu Verträgen usw. Mechanismen zur temporären Speicherung und zum Arbeiten mit Dateien werden oft zusammen verwendet, können aber auch separat verwendet werden.
Der Bedarf an temporärer Speicherung entsteht beispielsweise, weil das Webbrowser-Modell erfordert, dass eine vom Benutzer ausgewählte Datei direkt auf den Server übertragen wird, ohne dass die Möglichkeit besteht, sie auf dem Client zu speichern. Bei der Übertragung einer Datei wird diese im temporären Speicher abgelegt und kann dann beim Schreiben eines Objekts in die Datenbank verwendet werden.
Sie können temporären Speicher als Universalspeicher mit kontrollierter Datenlebensdauer nutzen:

1. Wenn die Daten bei der Zwischenspeicherung an eine bestimmte Form gebunden waren, hängt die Lebensdauer der gespeicherten Daten von der Lebenserwartung der Form ab, an die die Daten gebunden sind. Wenn Sie ein Formularobjekt löschen, werden alle damit verbundenen Informationen aus dem temporären Speicher gelöscht.

2. Wenn bei der vorübergehenden Speicherung der Daten die Bindung an das Formular nicht abgeschlossen wurde, wird die vorübergehende Speicherung in folgenden Fällen gelöscht:

  • Wenn Sie das Formular das nächste Mal anfordern.
  • Beim nächsten Serveraufruf vom gemeinsamen Clientmodul.
  • Für kontextbezogene und nicht kontextbezogene Clientaufrufe aus dem Formular.
  • Bei serverseitigem Aufruf aus einem Befehlsmodul. Wenn ein Serveraufruf erfolgt, um einen Wert im temporären Speicher abzulegen, wird keine Bereinigung durchgeführt. Die Bereinigung erfolgt, nachdem der Anruf seine Arbeit abgeschlossen hat.

Das heißt, Sie können einen oder mehrere Werte temporär speichern und diesen Wert beim nächsten Aufruf verwenden. Nach der Verwendung und vor Abschluss des Serveraufrufs wird der platzierte Wert jedoch automatisch entfernt.

Das typischste Anwendungsproblem, das durch temporäre Speicherung gelöst wird, ist die Bereitstellung des Zugriffs auf Dateien oder Bilder, bevor das Objekt beispielsweise in Form eines Elements in der Informationsbasis erfasst wird. Bei der Organisation eines solchen Zugriffs wird empfohlen, Daten von Client-Computern genau als Dateien auf den Server zu übertragen, ohne vorherige „Konvertierung“ in ein Textdokument, Tabellenkalkulationsdokument und ähnliche Formate des 1C:Enterprise-Systems. Es wird empfohlen, die Datei auf die Serverseite zu übertragen und dort die Dateidaten in die gewünschte Datei zu laden
Format des 1C:Enterprise-Systems.
Im Speicher abgelegte Daten werden durch eine eindeutige Adresse identifiziert, die später für Schreib-, Lese- oder Löschvorgänge verwendet werden kann. Diese Adresse wird von Methoden zum Schreiben eines Werts in den temporären Speicher angegeben. Mit einer separaten Methode in der integrierten Sprache können Sie feststellen, ob es sich bei der übergebenen Adresse um eine Adresse handelt, die auf Daten im temporären Speicher verweist.
Auf den in einer Sitzung erstellten temporären Speicher kann von einer anderen Sitzung aus nicht zugegriffen werden. Eine Ausnahme bildet die Möglichkeit, Daten von einem Hintergrundjob mithilfe der temporären Speicherung an die Sitzung zu übertragen, die den Hintergrundjob initiiert hat.

Burty . Die akzeptabelste Art, Kartoffeln, Wurzelgemüse und Weißkohl aufzubewahren, ist die Abfüllung in Flaschen. Ein Pfahl ist eine längliche, beidseitig geneigte Böschung, die oben mit Isoliermaterial bedeckt ist. Es dient dazu, die Ernte eine Saison lang aufzubewahren. Burts können gemahlen sein, wenn Kartoffeln auf eine ebene Fläche gegossen werden, und halbgemahlen, wenn flache Gruben gegraben werden. Popunautny (vergrabener) Haufen. Für einen solchen Haufen wird in Nord-Süd-Richtung eine Grube mit einer Tiefe von 25 cm gegraben. Die beste Breite der Grube für Pflanzkartoffeln beträgt 170-200 cm. Für die kurzfristige Lagerung gesunder Kartoffeln können Sie diese herstellen eine breitere Böschung (bis zu 4 m). Die Länge der Grube kann beliebig sein, besser ist es jedoch, wenn sie nicht mehr als 20-25 m beträgt. Die Höhe der Pfahldammhöhe mit einer Breite an der Basis von 2 m kann 90-25 m betragen. 100 cm. Typischerweise werden Kartoffeln in mehreren Stapeln an einem Ort gelagert. Die Bohrstelle liegt in der Nähe von Kartoffelanbaugebieten, an einem Ort, der nicht von Regen und Schmelzwasser überschwemmt wird, unweit der Straße. Entlang der Mittelachse der Grube wird ein 20-25 cm breiter und tiefer Lüftungskanal gegraben, der über die Grube hinausreicht und 25 cm länger ist als die Abdeckung am Ende des Kragens. Der über die Grubengrenzen hinausgehende Teil des Kanals wird oben dicht mit Brettern abgedeckt, damit keine Erde in die Grube und den Kanal gelangt. Bei Erdmanschetten wird der Lüftungskanal direkt auf der Erdoberfläche platziert und ist in Form eines Gitterzeltes aus einzelnen, eineinhalb Meter langen Abschnitten ausgeführt. Um zu verhindern, dass Stroh und Erde in den Lüftungskanal gelangen, sind dessen Enden lückenlos ausgeführt. Zur Abdeckung der Lüftungskanäle werden vorab Gitterabschnitte von 1,5 m Länge und 0,5 m Breite vorbereitet. Der Abschnitt besteht aus 2-3 cm breiten Lamellen und einem Abstand von 2-2,5 cm dazwischen. Die Abschnitte werden auf den Lüftungskanal gelegt und daran befestigt gegenseitig. Das so entstandene durchgehende Lüftungsgitter deckt den unter dem Produkt befindlichen Teil des Kanals ab. Bei der Bildung eines Hügels aus Kartoffeln oder anderen Produkten wird ein Kragenthermometer oder speziell angefertigte tetraedrische Röhrenhülsen mit einem Innenquerschnitt von 3x3 cm hineingelegt, in die am Ende des Stabes Thermometer eingeführt werden. Die Belüftung der Kragen erfolgt über einen First und einen Lüftungskanal. Die Haufen werden mit Stroh und Erde bedeckt. Vollstroh wird in einer dichten Schicht von unten nach oben so ausgelegt, dass die Scheitelhöhe des Stapels überlappt. Anschließend wird der Pfahl an den Seiten mit einer dünnen Erdschicht bestreut. Der Pfahlrücken bleibt bis zum ersten Frost unter einer Strohdecke. Bei Regenwetter wird es vorübergehend mit Dachpappe oder Kunststofffolie abgedeckt. Beim Abkühlen der Kartoffeln auf +4°C vor dem Einsetzen stabiler Fröste werden die Lüftungskanäle dicht mit Stroh abgedeckt und der Stapel vollständig mit Erde bedeckt. Sinkt die Temperatur in den Pfählen unter +1°C, werden die Pfähle zusätzlich mit wärmeisolierenden Materialien – Torf, Stroh, Strohmist oder Schnee – abgedeckt. Bei starkem Schneefall, der zu einer übermäßigen Bedeckung der Pfähle führt, werden diese regelmäßig vom Schnee befreit.

Grabenlagerung . Bei dieser Lagerungsmethode wird 2-mal weniger Stroh oder andere wärmeisolierende Materialien benötigt als bei der Lagerung in Haufen. Gräben werden verwendet, wenn das Grundwasser tief ist. Die Tiefe und Breite des Grabens beträgt 60–80 cm (in den südlichen Regionen) bis 1,5–2 m (in Sibirien). Die Gräben werden oben mit einer Strohschicht bedeckt: in den zentralen Regionen sind es 30-40 cm, in Sibirien bis zu 70 cm. Anschließend wird eine Erdschicht gegossen (40 bis 70 cm je nach Zone). Typischerweise werden verschiedene Arten von Gräben verwendet: flach, tief mit Lüftungskanälen, mit einer Erdschicht und ohne Schicht und gewöhnlich. Gräben und Pfähle sind mit einer (natürlichen) einfachen Belüftung ausgestattet. Sein Hauptzweck ist die Kühlung von Kartoffeln und Gemüse im Herbst. Das Funktionsprinzip der Zu- und Abluft basiert auf dem Luftdruckunterschied, d.h. auf dem Luftzug nach oben aufgrund des Temperaturunterschieds im Produktstapel und außerhalb. Warme Luft, die leichter ist, verlässt das Abgasrohr und kalte Luft tritt durch den Zuluftkanal ein. Das Lüftungssystem besteht aus Zu- und Abluftkanälen. Der Einlasskanal verläuft in der Mitte der Kragenbasis, an den Endenden befinden sich Ausgänge nach außen. In Stapeln mit Kartoffeln und Wurzelgemüse wird eine Rille mit einem Querschnitt von 20 x 20 cm oder 30 x 30 cm angebracht, die mit Gitterbrettern, Querlatten oder Reisig abgedeckt wird, damit einzelne Exemplare des Produkts nicht durchfallen. Durch diesen Kanal strömt aufgrund der Schwerkraft kältere Außenluft in den Schornstein. Die erwärmte Luft aus dem Kamin wird durch Abluftkanäle (Rohre) abgeführt. Es handelt sich um tetraedrische Kisten aus Brettern mit einem Querschnitt von 20 x 20 cm oder 15 x 15 cm. Im unteren Teil, der durch die Gemüseschicht verläuft, sind sie gitterförmig und im oberen Teil, der durch den Unterstand verläuft, sind sie massiv damit kein Erdreich hineinfällt. Darüber ist ein Vordach angebracht, um die Produkte vor Regenwasser zu schützen. Abhängig von den Eigenschaften und der Qualität des gelagerten Gemüses werden alle 2 bis 4 m entlang der Stapellänge Abgasrohre installiert. Einer der Nachteile vertikaler Abgasrohre besteht darin, dass warme und feuchte Luft nur aus den angrenzenden Bereichen des Schornsteins abgeführt wird und entfernte Bereiche kaum gekühlt werden. In der Nähe der Auspuffrohre strömt Wasser ein, wodurch die Produkte ausschwitzen und gefrieren, da der Schutz hier weniger dicht und zuverlässig ist. Daher kommt eine Firstabsaugung zum Einsatz. Bei der Lagerung von Gemüse bei trockenem, kühlem Wetter wird die Grabenkrone nur mit Stroh bedeckt, durch das warme Luft abgeführt wird. Solche Bedingungen sind jedoch selten; im Herbst ist das Wetter oft regnerisch. In solchen Fällen wird ein horizontaler Abluftkanal installiert – im 90°-Winkel zusammengeschlagene Bretter, die auf einen Gemüsestapel gelegt werden und an den Enden einen Ausgang nach außen haben. In diesem Fall kann der Graben entlang des Firsts sofort mit Stroh und Erde bedeckt werden, ohne dass das Stroh nass wird und das Produkt gefriert. Sie müssen lediglich die Endlöcher rechtzeitig schließen. Der Vorteil eines horizontalen Firstabluftkanals gegenüber vertikalen Abluftrohren besteht auch darin, dass in diesem Fall warme und feuchte Luft gleichmäßig aus dem gesamten Produktstapel entfernt wird.

Grube. Die einfachste Lagerung ist eine Erdgrube, in der meist eine kleine Menge Kartoffeln und gelegentlich Hackfrüchte gelagert werden. Es wird auf einer erhöhten Fläche mit niedrigem Grundwasserspiegel gegraben. Je nach Dichte des Bodens wird mit geraden oder geneigten Wänden gegraben. Die akzeptabelste Grubenform ist rund, manchmal werden sie jedoch auch rechteckig hergestellt. In den dichten Lehmboden wird ein krugförmiges Loch gegraben. Es wird nicht empfohlen, dies in sandigem Boden zu tun, da dieser sonst zusammenbricht. Graben Sie ein Loch wie folgt: Zeichnen Sie einen Kreis mit einem Durchmesser von 1 m und graben Sie den Hals des Kruges aus. Graben Sie dann tiefer und erweitern Sie das Loch allmählich auf eine Breite von 2 bis 2,5 m Durchmesser. Die Tiefe des Grubenkrugs sollte 1,5 bis 2 m betragen. Um zu verhindern, dass Schmelzwasser in die Grube eindringt, wird eine Rolle aus entferntem Ton um die Öffnung des Halses gelegt. Ein solcher Speicher wird mit einem schräg angebrachten Deckel abgedeckt, damit Regenwasser abperlen kann. Eine gut gemachte Grubenkanne hält ohne Reparatur 30-40 Jahre. Im Winter bleiben Temperatur und Luftfeuchtigkeit konstanter als in einem normalen Keller. Kartoffeln in einer solchen Grube schwitzen nicht und keimen nicht lange. Kartoffeln werden in kleinen Gruben ohne Belüftung gelagert. In großen Fällen wird ein Lüftungsrohr aus Brettern oder vier Pfählen installiert, die in den Boden der Grube getrieben und mit einer Strohschnur umwickelt werden. Kartoffeln werden mit einem Eimer in das Loch abgesenkt. Am Eimer sind zwei Seile befestigt: eines am Griff und das andere am Boden. Nachdem der Eimer den Boden erreicht hat, ziehen Sie an dem am Boden befestigten Seil. Gleichzeitig kippt der Eimer um und die Kartoffeln laufen heraus. Knollen werden bei dieser Verfüllmethode nicht verletzt. Nachdem der Kernkrug mit Kartoffeln gefüllt wurde, wird der Hals mit Strohhalm und einem Deckel verschlossen. Da Kartoffeln in den ersten zwei Wochen beim Atmen viel Feuchtigkeit abgeben, sollte die Strohschicht nicht zu dick sein. Später wird die Schicht je nach örtlichen Winterbedingungen auf 50–70 cm angepasst.

Drucken (Strg+P)

In diesem Abschnitt werden die häufigsten Verwendungszwecke des Mechanismus für die Arbeit mit temporärem Speicher und Dateien beschrieben.

Speichern von Daten aus einer Datei im temporären Speicher

Platzierung einer Datei

Die Methode PlaceFile() platziert eine Datei aus dem lokalen Dateisystem im temporären Speicher. Die Methode kann eine Adresse im temporären Speicher akzeptieren, an der die Datei gespeichert werden soll. Wenn die Adresse nicht definiert ist oder eine leere Zeichenfolge ist, wird eine neue Adresse erstellt und die Methode gibt sie über einen speziellen Parameter zurück.
Notiz. Die Datenmenge, die in einem Aufruf der PutFile()-Methode zwischen Client und Server verschoben wird
Wenn der Parameter, der den interaktiven Betriebsmodus bestimmt, True ist, zeigt die Methode ein Standarddialogfeld zur Dateiauswahl an, in dem Sie eine Datei auswählen können, die im Speicher abgelegt werden soll. In diesem Fall gibt die Methode auch die Adresse der ausgewählten Datei zurück.
Infolgedessen gibt die Methode „False“ zurück, wenn der Benutzer interaktiv die Ausführung einer Operation im Dateiauswahldialog abgelehnt hat.

Platzieren einer Reihe von Dateien

Methode PlaceFiles() Legt mehrere Dateien in einem Aufruf in den temporären Speicher. Es gibt verschiedene Möglichkeiten, diese Methode zu verwenden:
● Erstellen Sie vorab eine Liste der hinzuzufügenden Dateien, z. B. wenn Sie zuvor die Dateien ausgewählt haben, die in die Informationsdatenbank aufgenommen werden sollen.
● Übergeben Sie der Methode eine Dateisuchmaske, beispielsweise wenn Sie alle Dateien eines bestimmten Typs, beispielsweise alle Bilder, in der Informationsdatenbank ablegen möchten.
● Übergeben Sie ein zuvor vorbereitetes Objekt an die Methode Dateiauswahldialog im Dateiöffnungsmodus.
Nach Abschluss ihrer Arbeit kann die Methode eine Liste der tatsächlich hinzugefügten Dateien zurückgeben.

// FileList – Attribut des Formulars vom Typ ValueList,
// enthält eine Liste der hinzugefügten Dateien
FileArray = Neues Array;
Für jedes Element der Liste aus dem Dateilistenzyklus
FileArray.Add(NewDescriptionofTransferFile(ListElement,));
EndCycle;
PlacedFiles= Neues Array;
Ergebnis = PlaceFiles(ArrayFiles, PlacedFiles, False, UniqueIdentifier);

Hinweis 1: Zur Verwendung der Methode PlaceFiles() Der Webclient erfordert die Anbindung einer Dateiverarbeitungserweiterung.
Hinweis 2: Datenmenge, die pro Methodenaufruf zwischen Client und Server verschoben wird PlaceFiles(), sollte 4 GB (in serialisierter Form) nicht überschreiten.

Daten im temporären Speicher ablegen

Die Methode ähnelt der PlaceFile()-Methode, außer dass die Daten in den temporären Speicher geschrieben werden
werden nicht als Pfad im Dateisystem dargestellt, sondern als Wert. Wenn im temporären Speicher keine vorhandene Adresse angegeben ist, wird ebenfalls eine neue Adresse erstellt. Die Adresse wird als Ergebnis der Funktion zurückgegeben. Wie bei Dateien müssen die geposteten Daten zu einem bestimmten Formular gehören und werden nach dem Löschen automatisch gelöscht.
Notiz. Datenmenge, die pro Methodenaufruf zwischen Client und Server verschoben wird PlaceInTemporaryStorage(), sollte 4 GB (in serialisierter Form) nicht überschreiten.
Aufmerksamkeit! Beim Ablegen im temporären Speicher wird der Wert nicht tatsächlich serialisiert. Ein Verweis auf den Wert wird platziert und 20 Minuten lang im Cache gespeichert. Nach diesem Zeitraum wird der Wert serialisiert, auf die Festplatte geschrieben (Sitzungsdatenspeicher) und aus dem Cache entfernt.

Abrufen von Daten aus dem temporären Speicher

Wenn Sie ein Objekt in eine Infobase schreiben, müssen Sie möglicherweise Daten aus dem temporären Speicher extrahieren und beispielsweise in einem Infobase-Objektattribut platzieren. Hierfür gibt es eine spezielle Methode – GetFromTemporaryStorage(). Diese Methode ruft Daten aus dem temporären Speicher ab und gibt sie als Ausführungsergebnis zurück. Um Daten zu erhalten, müssen Sie die Adresse vorübergehend angeben
Lagerung. Diese Adresse wird von Methoden zum Zwischenspeichern von Daten zurückgegeben, wenn sie erfolgreich sind (siehe vorherige Abschnitte).
Aufmerksamkeit! Wenn Sie einen Wert aus dem temporären Speicher auf dem Server abrufen, sollten Sie berücksichtigen, dass er per Referenz abgerufen wird. In Wirklichkeit verweist dieser Link auf einen Wert, der im Cache gespeichert ist. Innerhalb von 20 Minuten, ab dem Zeitpunkt der Speicherung oder dem letzten Zugriff, wird der Wert im Cache gespeichert, dann auf die Festplatte geschrieben und aus dem Cache gelöscht. Beim nächsten Zugriff auf den Wert wird er von der Festplatte geladen und wieder im Cache abgelegt.
Nach der Deserialisierung und Wiederherstellung von Werten aus dem Zwischenspeicher werden Referenzen nicht wiederhergestellt. Der Cache-Wert wird von der Festplatte wiederhergestellt. Nach der Serialisierung/Deserialisierung ist es jedoch unmöglich, Verweise auf andere Objekte innerhalb des Werts wiederherzustellen.

Daten aus temporärem Speicher löschen

Nachdem die Daten im Infobase-Objektattribut gespeichert wurden, können die Daten im temporären Speicher gelöscht werden. Dafür gibt es eine Methode
RemoveFromTemporaryStorage(), welches die Entfernung durchführt. Als Parameter verwendet die Methode eine Adresse im temporären Speicher.

Überprüfung der Adresse zur Zwischenspeicherung

Die Adresse kann sowohl auf die vorübergehende Speicherung als auch auf Details in der Informationsdatenbank hinweisen. Es gibt eine Methode zur Überprüfung des Typs
Dies istTemporaryStorageAddress(). Es prüft, ob es sich bei der übergebenen Adresse um eine Adresse handelt, die auf den Store verweist. Gibt „True“ zurück, wenn die Adresse auf temporären Speicher verweist.

Erhalt der Requisitenadresse

Nachdem die Daten im Infobase-Objektattribut platziert wurden, müssen Sie möglicherweise mithilfe von Dateimethoden darauf zugreifen.
Doch bevor Sie Daten, beispielsweise von einer Immobilie, erhalten, müssen Sie die Adresse dieser Immobilie erfahren. Dafür gibt es eine Methode GetNavigationLink().

Es kann die Adresse des Werts in der Infobase basierend auf den ursprünglichen Parametern zurückgeben. Dazu müssen Sie den Objektschlüssel übergeben (dies könnte sein
(sowohl ein Link zum Objekt als auch der Eintragsschlüssel des Informationsregisters) und der Name des Attributs. Wenn Sie die Adresse des im Attribut gespeicherten Werts benötigen
Wenn Sie einen tabellarischen Teil verwenden, müssen Sie zum Attributnamen im Parameter, der den Attributnamen angibt, den Namen des tabellarischen Teils und einen Punkt „.“ hinzufügen. Zum Beispiel: Produkte.Bild

Abrufen einer Datei aus der Infobase

Eine Datei wird empfangen

Die Methode GetFile() empfängt eine Datei aus der Infobase und speichert sie im lokalen Dateisystem des Benutzers. Der erste Parameter gibt die Dateiadresse im Infobase-Objektattribut oder im temporären Dateispeicher an. Das Speichern erfolgt nicht, wenn der Benutzer, in dessen Namen der Vorgang ausgeführt wird, nicht über das Recht zum Anzeigen der Details des Infobase-Objekts verfügt. Der zweite Parameter bestimmt den Speicherort der resultierenden Datei. Im nicht interaktiven Modus müssen Sie den Pfad angeben. Im interaktiven Modus lautet der Parameter
Optional.
Standardmäßig wird die Methode interaktiv ausgeführt. Dies bedeutet, dass ein Dialogfeld generiert wird, in dem Sie eine Aktion mit der empfangenen Datei festlegen können: sie ausführen oder an einem vom Benutzer angegebenen Speicherort im Dateisystem speichern. Wenn der interaktive Modus ausgewählt ist und die Option „Dateiname“ nicht angegeben ist, ist der Vorgang zum Öffnen einer Datei nicht verfügbar. Die Methode gibt einen booleschen Wert zurück. Falsch bedeutet, dass der Benutzer den Vorgang im interaktiven Dialogfeld zum Speichern der Datei abgebrochen hat.

Empfangen einer Reihe von Dateien

Mit der Methode GetFiles() können Sie mehrere in der Infobase gespeicherte Dateien im lokalen Dateisystem des Benutzers empfangen und speichern. Als Parameter wird die Liste der hochgeladenen Dateien übergeben.

// FileList – eine Werteliste, die Links zu Elementen enthält
// Verzeichnis, in dem sich die hochgeladenen Dateien befinden
// Die Darstellung der Werteliste ist der Name der hochgeladenen Datei
FileArray = Neues Array;
Für jedes Element der Liste aus dem Dateilistenzyklus
Datei = Neu File(String(ListElement.Value));
ReceiveFile = Neu Beschreibung der übermittelten Datei;
Empfangsdatei.Name = ListElement.View;
ReceiveFile.Storage= P getNavigationLink(ListItem.Value, „Data“);
FileArray.Add(ReceivingFile);
EndCycle;
Empfangene Dateien= Neues Array;
Ergebnis = ReceiveFiles(FilesArray, ReceivedFiles, UploadedFilesPath, False);
Wenn NICHT Ergebnis, dann
Nachricht = Neu Nachricht an den Benutzer;
Message.Text = „Fehler beim Empfangen der Dateien!“;
Message.Message();
EndIf ;

Nach Abschluss kann die Methode eine Liste der tatsächlich heruntergeladenen Dateien zurückgeben und den vollständigen Namen jeder gespeicherten Datei angeben.
NOTIZ. Um die GetFiles()-Methode im Webclient verwenden zu können, müssen Sie die Dateierweiterung verbinden. Wenn die Eigenschaft Objektname Beschreibung der übertragenen Datei Enthält den absoluten Pfad zur Datei, die Datei wird unabhängig vom Parameter in diesem Pfad gespeichert Speicherort.
Der Parameter „Dateispeicherort“ kann entweder ein Pfad im lokalen Dateisystem oder ein Dateiauswahldialogobjekt im Modus zum Auswählen eines Verzeichnisses oder Speichern von Dateien sein. Wenn der Parameterwert Speicherort Objekt angegeben Dateiauswahldialog im Modus
Dateien speichern, dann:

● Der Dialog wird für jede übertragene Datei aufgerufen, mit Ausnahme derjenigen Dateien, für die die Eigenschaft „Objektname der übertragenen Dateibeschreibung“ einen absoluten Pfad enthält.
● Der Wert des Objektnamens der Eigenschaft „Beschreibung der übertragenen Datei“ wird als anfänglicher Dateiname im Dialogfeld verwendet.
● Wenn für eine Datei die Option „Speichern verweigern“ ausgewählt ist, enthält der Name des Objekts und die Beschreibung der Eigenschaft „Übertragene Datei“ eine leere Zeichenfolge.
● Die GetFiles()-Methode gibt den Wert True zurück, wenn mindestens eine Datei erfolgreich empfangen wurde;
● Es ist zu berücksichtigen, dass die Dateien tatsächlich empfangen werden, nachdem der Benutzer Fragen zur Angabe von Name und Pfad beantwortet hat
alle empfangenen Dateien;
● Wenn der Benutzer, in dessen Namen die GetFile()-Methode ausgeführt wird, nicht über das Recht „Ansicht“ für mindestens ein Attribut des Infobase-Objekts verfügt, aus dem Dateien abgerufen werden, schlägt der gesamte Vorgang fehl.
Beispiel:

TransferredFiles = Neues Array;
Beschreibung = Neu Beschreibung der übertragenen Datei(„Beschreibung“, Dateiadresse);
Übertragene Dateien.Hinzufügen(Beschreibung );
FileSelect = Neu FileSelectionDialog(FileSelectionDialogMode.Save);
FileSelect.Header= „Archiv speichern“;
Dateiauswahl.Erweiterung= „zip“;
FileSelect.Filter= „Archiv(*.zip)|*.zip|Alle Dateien|*.*“;
FileSelect.FilterIndex = 0;
ReceiveFiles(TransferFiles, SelectFile, False);

Wenn der interaktive Modus zur Auswahl des Verzeichnisses zum Speichern von Dateien ausgewählt ist, fordert der Webclient zusätzlich die Erlaubnis zum Speichern von mit absoluten Pfaden angegebenen Dateien an. Bei nicht-interaktivem Speichern (der Pfad zum Verzeichnis wird im entsprechenden Parameter angegeben) wird die Anfrage für die gesamte Liste der gespeicherten Dateien ausgeführt.

Beispiel für die Verwendung von Dateimethoden

// Interaktives Abrufen einer Datei von der Festplatte
// und in den temporären Speicher legen.
&OnClient
Verfahren SelectDiskFileIWrite()
Variable SelectedName;
Perem TemporaryStorageAddress;
NewObject = Object.Link.Empty();
Wenn PlaceFile(TemporaryStorageAddress, „“, SelectedName, True) Dann
Object.FileName = SelectedName;
PlaceObjectFile(TemporaryStorageAddress);
endIf;
Ende des Verfahrens
// Kopieren einer Datei vom temporären Speicher in props
// Verzeichnis, Schreiben eines Objekts, Löschen einer temporären Datei
// Lagerung.
&Auf dem Server
Verfahren PlaceObjectFile(TemporaryStorageAddress)
Verzeichniselement = Form AttributesValue(“Object”);
BinaryData = GetFromTemporaryStorage(TemporaryStorageAddress);
Verzeichniselement.Dateidaten= Neu StorageValues(BinaryData, NewDataCompression()) ;
Datei = Neu Datei(Verzeichniselement.Dateiname);
Verzeichnis Item.FileName = File.Name;
Verzeichniselement.Write();
Geändert = Falsch;
DeleteFromTemporaryStorage(TemporaryStorageAddress);
ValueFormAttributes(Directory Element, „Object“);
Ende des Verfahrens
// Lies die Datei aus den Requisiten und speichere sie
// auf der lokalen Festplatte im interaktiven Modus.
&OnClient
Verfahren ReadFileAndSaveToDisk()
Adresse = GetNavigationLink(Object.Link,"FileData");
GetFile(Address, Object.FileName, True);
Ende des Verfahrens

Berechtigung zum Ausführen einer Gruppe von Dateivorgängen

Wenn Sie einige Vorgänge im Webclient ausführen, müssen Sie möglicherweise die Berechtigung für mehrere Dateivorgänge einholen.
Beispielsweise müssen Sie ein Dokument aus einer Infobase abrufen und dann das gespeicherte Dokument mit der zugehörigen Anwendung öffnen.
Um diesen Vorgang auszuführen, müssen Sie die Frage zum Speichern des Dokuments und die Frage zur Notwendigkeit seiner Ausführung beantworten. Bei mehr Vorgängen ergeben sich für den Nutzer auch mehr Fragen.
Um die Anzahl der Fragen zu reduzieren, können Sie die Methode verwenden. Bei Verwendung dieser Methode
Dem Benutzer wird eine Liste aller Operationen angezeigt, deren Durchführung geplant ist, und er wird aufgefordert, die Ausführung der Gruppe von Operationen zuzulassen. Wenn der Benutzer die Ausführung zugelassen hat, werden die angeforderten Vorgänge ohne zusätzliche Anforderungen an den Benutzer ausgeführt. Wenn die Berechtigung nicht erteilt wird, werden die Vorgänge wie gewohnt fortgesetzt: eine Anfrage pro Vorgang.
NOTIZ. Um die Methode zu verwenden RequestUserPermission() Im Webclient müssen Sie die Dateiverwaltungserweiterung aktivieren.
Schauen wir uns ein Beispiel für die Verwendung der Methode an:

Wenn ConnectExtensionWorking With Files() Dann
Link = GetNavigationLink(Object.Link, „FileData“);
// Bildung einer Beschreibung der übertragenen Dateien (in diesem Fall gibt es nur eine Datei)
Übertragene Dateien= Neues Array;
Beschreibung = Neue Beschreibung der übertragenen Datei (Objekt. Dateiname, Link);
TransferredFiles.Add(Description);
// Bereiten Sie ein Objekt vor, um Informationen über empfangene Dateien zu erhalten
Übertragene Dateien= Neues Array;

// Andere Methodenparameter definieren
VerzeichnisSpeichern= „c:\temp“;
Interaktiv = Falsch ;
Übertragener Dateiname = Speicherverzeichnis + „\“ + Object.FileName;
// Bereiten Sie eine Beschreibung der Methoden zum Erhalten von Berechtigungen vor
Methoden = Neues Array;

Methods.Add(“GetFiles”);
Methods.Add(TransferFiles);
Methods.Add(TransferredFiles);
Methods.Add(SaveDirectory);
Methods.Add(Interaktiv);
Methods.Add(New Array);
Methods.Add(“RunApplication”);
Methods.Add(TransferredFileName);
Wenn nicht RequestUserPermission(Methoden) Dann
Warning("Der Benutzer hat die Berechtigung verweigert.");
Zurückkehren;
endIf;
GetFiles(TransferFiles, TransmittedFiles, SavingDirectory, Interactive);
RunApplication(TransferredFileName);
Ansonsten
Warnung("Ausführung wird nicht unterstützt. Die Dateierweiterung ist nicht installiert.");
endIf;

Mehrere Merkmale der Methode sollten beachtet werden RequestUserPermission().

1. Eine Genehmigung wird nur für die folgenden Methoden beantragt:

GetFiles()/StartGettingFiles(),
● PlaceFiles()/StartPlaceFiles(),
● FindFiles()/StartSearchFiles(),
● CopyFile()/StartCopyFile(),
● MoveFile()/StartMovingFile(),
●DeleteFiles()/StartDeleteFiles(),
● CreateDirectory()/StartCreatingDirectory(),
● LaunchApplication()/StartRunApplication().

2. Für einen bestimmten Satz von Methodenparametern wird eine Erlaubnis angefordert. Wenn während der tatsächlichen Ausführung einer Dateimanipulationsmethode die Parameterwerte von denen abweichen, für die die Erlaubnis eingeholt wurde, ist diese Erlaubnis ungültig und der Benutzer erhält eine separate Anfrage zur Bestätigung des Vorgangs.

3. Wenn Sie zwei (oder mehr) identische Operationen mit Dateien ausführen müssen (auch mit demselben Parametersatz), sollten Sie die entsprechende Anzahl von Elementen im Methodenparameter-Array angeben RequestUserPermission(). Wenn Sie beispielsweise dieselbe Datei zweimal aus der Infobase abrufen und an einem festen Speicherort im Dateisystem ablegen müssen, sollten Sie um Erlaubnis bitten
für zwei Operationen.

4. Wenn eine Berechtigung für einen Vorgang angefordert wird, der einen interaktiven Vorgang ausführt (z. B. die Funktion „GetFiles()“), wird ein Objekt als Parameter übergeben Dateiauswahldialog), dann ist ein solcher Vorgang von der Anfrage ausgeschlossen.

Gewährte Berechtigungen bleiben entweder so lange erhalten, bis der autorisierte Aufruf ausgeführt wird oder bis die Ausführung der integrierten Sprache abgeschlossen ist.
NOTIZ. Bei Thick- und Thin-Clients RequestUserPermission() Die Methode gibt immer True zurück, ohne Benutzerinteraktion.

Arbeiten mit temporärer Speicherung in einem Hintergrundjob

Der Mechanismus zum Arbeiten mit temporärem Speicher bietet die Möglichkeit, Daten von einem Hintergrundjob an die Sitzung zu übertragen, die den Hintergrundjob initiiert hat.
Für eine solche Übertragung sollten Sie einen leeren Wert im temporären Speicher der übergeordneten Sitzung ablegen (mithilfe der Methode PlaceInTemporaryStorage()), unter Angabe einer beliebigen Kennung des temporären Speichers, der erstellt wird (Parameter „Adresse“). Übergeben Sie dann die empfangene Adresse über die Hintergrundjob-Parameter an den Hintergrundjob. Darüber hinaus wird diese Adresse in einem Hintergrundjob als Wert des Parameters „Methodenadresse“ verwendet PlaceInTemporaryStorage(), dann wird das Ergebnis in die Sitzung kopiert, von der aus der Hintergrundjob gestartet wurde.
Auf Daten, die in einem Hintergrundjob im temporären Speicher abgelegt werden, kann in der übergeordneten Sitzung erst dann zugegriffen werden, wenn der Hintergrundjob abgeschlossen ist.

Unterstützung für Adressen im Bildfeld

Das Formularelement „Ansichtsfeld“ Das Feld „Bild“ unterstützt die Anzeige eines Bildes, das durch die Adresse eines Werts (bei dem es sich um ein Bild oder Binärdaten handeln kann) im temporären Speicher oder in einer Datenbank angegeben wird.
Dazu müssen Sie in der Data-Eigenschaft des Formularelements ein String-Typ-Attribut festlegen. Der Wert dieses Attributs wird als Adresse des Bildes interpretiert.

// Beispiel 1
// Das Bildfeld vorübergehend an die Bildadresse binden
// Lagerung. AddressPictures – Formulardetails vom Typ Zeichenfolge
PlaceFile(ImageAddress, InitialName, SelectedName, True, UniqueIdentifier);
// Beispiel 2
// Die Adresse des Bildes aus dem Objektattribut erhalten
// Informationsbasis
FilePictures = Object.FilePictures;
Wenn nicht, dann PictureFile.Empty()
ImageAddress = GetNavigationLink(ImageFile, „FileData“);
Ansonsten
ImageAddress = „“;
Endlos;

Zugriff auf Standardverzeichnisse

Bei der Nutzung des Systems wird etwas Platz im Dateisystem benötigt, auf dem verschiedene Dateidaten gespeichert werden können, die einerseits temporär sind und andererseits über einen längeren Zeitraum gespeichert werden müssen. Zu diesen Dateien gehören Entwürfe für Dokumentenmanagementsysteme, externe Komponenten, die auf der Client-Computerseite ausgeführt werden usw.
Für die Speicherung solcher Dateien ist ein spezielles Verzeichnis vorgesehen, das an einen bestimmten Benutzer einer bestimmten Informationsbasis gebunden ist.
Derselbe Benutzer, der mit zwei Infobases arbeitet, hat Zugriff auf zwei verschiedene Verzeichnisse zum Speichern von Benutzerdaten. Der Speicherort dieses Verzeichnisses wird mit der Methode ermittelt WorkUserDataDirectory(). Wenn das Verzeichnis nicht existiert, wird es beim ersten Zugriff erstellt. Wenn das Verzeichnis nicht erstellt werden kann, löst das System eine Ausnahme aus.
NOTIZ. Die Methode UserDataWorkDirectory() ist serverseitig nicht verfügbar.
Dem Betriebssystem ist ein spezielles Verzeichnis zur dauerhaften Speicherung von Benutzerdaten zugewiesen. Es könnten welche sein
Berichte, gedruckte Formulare von Dokumenten usw. In diesem Verzeichnis werden Daten abgelegt, die später an externe gesendet werden können
an Verbraucher. Für den Zugriff auf dieses Verzeichnis wird die Methode DocumentDirectory() verwendet. Der physische Speicherort des Verzeichnisses variiert je nach Betriebssystem.
System, auf dem die Anwendung ausgeführt wird und im Syntaxassistenten aufgeführt wird.