1c tymczasowe przechowywanie danych. Magazynowanie tymczasowe. Jak się nazywają?

Prawie każda informacja może być przechowywana w magazynie wartości, np.

... zdjęcia (zdjęcia):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Wyliczenia.Typy dodatkowych informacji o obiektach.Image; Magazyn = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// w tym miejscu wyświetla wszystko... Form Elements.PictureField1.Picture = Storage.Get(); Bieżący Obraz. Zapis();

...dokument arkusza kalkulacyjnego:

TabDoc=Nowy dokument tabelaryczny; TabDoc.Output(FormElements.TabularDocumentField1); Magazyn=NowaWartośćStorage(TabDoc); Pisać();

Koniec procedury

Procedura RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Jeśli TabDoc<>Niezdefiniowany NastępnieFormElements.TabularDocumentField1.Output(TabDoc); koniecJeśli;

Koniec procedury

...dowolne pliki (dane binarne):

XZ = NewValueStorage(NewBinaryData(plik));

Osiem obsługuje kompresję danych umieszczonych w pamięci:

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

... przetwarzanie zewnętrzne i raportowanie:

Procedura LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 maksymalnie PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", współczynnik kompresji));

Koniec procedury

Procedura StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(NazwaPliku Tymczasowego); Przetwarzanie zewnętrzne = Przetwarzanie zewnętrzne.Create(TemporaryFileName); Przetwarzanie zewnętrzne.GetForm().Open();

Koniec procedury

Praca z magazynem

Jeżeli były to dane binarne, to można je odtworzyć z magazynu wartości metodą Get i zapisać do pliku metodą Write().

Jeśli TypWartość (Pamięć)<>Type("BinaryData") Następnie

BinaryData = Storage.Get();

BinaryData = Pamięć;

koniecJeśli; BinaryData.Write(NazwaPliku);

Jeśli był to na przykład dokument Word (plik doc lub inny zarejestrowany typ pliku), to można go otworzyć w następujący sposób:

UruchomAplikację(NazwaPliku);

Aby wyczyścić pole typu Przechowywanie wartości, należy przypisać mu Niezdefiniowane:

PropsStorage = Niezdefiniowane;

Praca z plikami i obrazami w wbudowanym języku 1C:Enterprise 8

Zamiar

Zarządzana aplikacja implementuje nowy mechanizm pracy z plikami. Zapewnia wymianę plików pomiędzy bazą danych a aplikacją kliencką. Osobliwością tego mechanizmu jest to, że jest on przeznaczony do użytku w cienkim kliencie i kliencie internetowym i został zaprojektowany z uwzględnieniem ograniczeń w pracy z plikami nałożonych przez przeglądarki internetowe.

Mechanizm to zbiór metod, za pomocą których można umieścić dane przechowywane lokalnie na komputerze użytkownika w tymczasowym magazynie bazy informacji, przenieść te informacje z tymczasowego magazynu do bazy danych i otrzymać je z powrotem do komputera użytkownika. Najczęstsze problemy aplikacyjne rozwiązywane przez ten mechanizm to przechowywanie informacji towarzyszących, np. zdjęć towarów, dokumentów związanych z umowami itp.

Zakres metody

Magazynowanie tymczasowe

Magazyn tymczasowy to wyspecjalizowany obszar bazy informacji, w którym mogą być umieszczone dane binarne. Głównym celem jest tymczasowe przechowywanie informacji podczas interakcji klient-serwer, zanim zostaną one przesłane do bazy danych.

Konieczność przechowywania tymczasowego wynika z tego, że model działania przeglądarki internetowej wymaga, aby wybrany przez użytkownika plik został przesłany bezpośrednio na serwer bez możliwości przechowywania go na kliencie. Po przesłaniu pliku jest on umieszczany w magazynie tymczasowym i można go następnie wykorzystać podczas zapisywania obiektu w bazie danych.

Najbardziej typowym zadaniem aplikacji rozwiązywanym przez tymczasowe przechowywanie jest udostępnienie plików lub zdjęć zanim obiekt zostanie zapisany w bazie informacji, np. w postaci elementu.

Plik lub dane binarne umieszczone w pamięci są identyfikowane poprzez unikalny adres, który może być później użyty do operacji zapisu, odczytu lub usuwania. Adres ten nadawany jest metodami zapisu pliku do pamięci tymczasowej. Odrębna metoda w języku wbudowanym pozwala określić, czy przekazany adres jest adresem wskazującym na dane znajdujące się w magazynie tymczasowym.

Baza informacyjna

Mechanizm umożliwia dostęp do danych binarnych przechowywanych w atrybutach typu Value Storage.

Podobnie jak w przypadku tymczasowego przechowywania, dostęp do informacji możliwy jest poprzez specjalny adres. Można to uzyskać specjalną metodą, przekazując odnośnik do obiektu lub klucz wpisu do rejestru informacyjnego oraz nazwę atrybutu. W przypadku części tabelarycznej wymagane jest dodatkowo przeniesienie indeksu wiersza części tabelarycznej.

Metody pracy z plikami mają ograniczenia podczas pracy ze szczegółami bazy danych. Dla nich, w przeciwieństwie do magazynu tymczasowego, dostępne jest jedynie odczytywanie informacji, ale nie ich zapisywanie ani usuwanie.

Opis metod pracy z plikami

Zapisywanie danych w pamięci tymczasowej

Najbardziej typowy scenariusz wykorzystania tego mechanizmu polega na początkowym umieszczeniu danych użytkownika w magazynie tymczasowym. Można to zrobić na dwie metody: PlaceFile() i PlaceFileInTemporaryStorage().

Pierwsza metoda, PlaceFile(), umieszcza plik z lokalnego systemu plików w magazynie tymczasowym. Metoda może akceptować adres docelowy w pamięci. Jeśli nie jest zdefiniowany lub jest pustym ciągiem znaków, wówczas zostanie utworzony nowy plik, a metoda zwróci jego adres poprzez odpowiedni parametr.

Jeżeli parametr określający interaktywny tryb działania ma wartość True, to metoda wyświetli standardowe okno dialogowe wyboru pliku, w którym można wybrać plik do umieszczenia w pamięci. W tym przypadku metoda zwróci także adres wybranego pliku.

W rezultacie metoda zwraca False, jeśli użytkownik interaktywnie odmówił wykonania operacji w oknie dialogowym wyboru pliku. Metoda jest dostępna tylko na kliencie.

Druga metoda, PlaceFileInTemporaryStorage(), jest podobna do poprzedniej, z tą różnicą, że jest dostępna na serwerze, a dane, które mają zostać zapisane w pamięci tymczasowej, są reprezentowane nie jako ścieżka w systemie plików, ale jako zmienna typu Dane binarne. Podobnie, jeśli nie określono adresu docelowego, w pamięci zostanie utworzony nowy plik. W wyniku działania funkcji zwracany jest jego adres.

Pobieranie pliku z magazynu tymczasowego

Podczas zapisywania obiektu do bazy danych może zaistnieć potrzeba wyodrębnienia danych z magazynu tymczasowego i umieszczenia ich na przykład w atrybucie. Istnieje do tego odpowiednia metoda serwera - GetFileFromTemporaryStorage(). Ta metoda pobiera dane z magazynu tymczasowego i w rezultacie je zwraca. Aby to zrobić, musisz podać adres w pamięci tymczasowej. Adres ten jest zwracany przez opisane powyżej metody PlaceFile() i PlaceFileInTemporaryStorage(), jeśli zostaną pomyślnie wykonane.

Usuwanie pliku z magazynu tymczasowego

Po zapisaniu danych w szczegółach, plik w pamięci tymczasowej można usunąć. W tym celu istnieje metoda DeleteFileFromTemporaryStorage(), która usuwa plik z magazynu tymczasowego. Metoda przyjmuje jako parametr adres pliku w pamięci tymczasowej. Dostępne na serwerze.

Sprawdzanie adresu tymczasowego przechowywania

Adres pliku może wskazywać zarówno tymczasowe przechowywanie, jak i szczegóły w bazie danych. Aby sprawdzić jego typ, istnieje metoda This isTemporaryStorageAddress().

Sprawdza, czy przekazany adres jest adresem wskazującym na sklep. Zwraca True, jeśli adres wskazuje na pamięć tymczasową. Metoda jest dostępna na serwerze.

Otrzymanie adresu rekwizytów

Po umieszczeniu danych w szczegółach w bazie danych może zaistnieć potrzeba uzyskania dostępu do nich za pomocą metod plikowych.

Zanim jednak otrzymasz dane np. z nieruchomości, musisz poznać adres tej nieruchomości. W tym celu istnieje metoda GetFileAddressInInformationBase().

Jego celem jest zwrócenie adresu pliku w bazie danych zgodnie z oryginalnymi parametrami. W tym celu należy przekazać klucz obiektu (może to być link do obiektu lub klucz wpisu do rejestru informacyjnego) oraz nazwę atrybutu. Jeżeli chcemy uzyskać adres pliku zapisanego w atrybucie części tabelarycznej, to przed nazwą atrybutu w parametrze określającym nazwę atrybutu należy dodać nazwę części tabelarycznej oraz kropkę „.”. Metoda jest dostępna zarówno na kliencie, jak i na serwerze.

Pobieranie pliku z bazy danych

Metoda GetFile() pobiera plik z bazy danych i zapisuje go w lokalnym systemie plików użytkownika. Pierwszy parametr określa adres pliku w rekwizytach lub tymczasowym magazynie plików. Drugi parametr określa lokalizację docelową pliku wynikowego. W trybie nieinteraktywnym należy określić ścieżkę. W trybie interaktywnym parametr jest opcjonalny.

Domyślnie metoda wykonywana jest w trybie interaktywnym, czyli ostatni parametr ma wartość True. Oznacza to, że wyświetli się okno dialogowe, w którym możesz określić akcję na odebranym pliku: uruchomić go lub zapisać w lokalizacji określonej przez użytkownika. Jeśli tryb interaktywny jest aktywny i nie określono parametru Ścieżka pliku na dysku docelowym, operacja otwarcia pliku nie jest dostępna. Zwraca wartość logiczną. Fałsz oznacza, że ​​użytkownik zdecydował się anulować operację w interaktywnym oknie dialogowym zapisywania pliku.

Przykład użycia metod plikowych

// Odbiór pliku z dysku w trybie interaktywnym // i umieszczenie go w magazynie tymczasowym &Na kliencie Procedura SelectDiskFileAndWrite()

Zmienna wybrana nazwa; ZmiennyTemporaryStorageAdres; Jeśli PutFile(TemporaryStorageAddress, SelectedName, True) then Object.FileName = SelectedName; PlaceObjectFile (TemporaryStorageAddress); koniecJeśli;

Koniec procedury

// Kopiowanie pliku z magazynu tymczasowego do // atrybutu katalogu, zapisanie obiektu, usunięcie pliku z // magazynu tymczasowego &Na serwerze Procedura Umieść plik obiektu (adres magazynu tymczasowego)

Element katalogu = Form AttributesValue("Obiekt"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Element katalogu. Dane pliku = NewValueStorage(BinaryData); FilePathOnDisk = Nowy plik (DirectoryItem.FileName); Element katalogu.FileName = FilePathOnDisk.Name; Element katalogu.Write(); Zmodyfikowano = Fałsz; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); Value – FormAttributes (Element katalogu, „Obiekt”);

Koniec procedury

// Odczytanie pliku z właściwości i zapisanie go // na dysku lokalnym w trybie interaktywnym &Na kliencie Procedura ReadFileAndSaveToDisk()

Adres = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Adres, Obiekt.NazwaPliku, Prawda);

Koniec procedury

Obsługa adresów w polu obrazu

Kontrolka Pole obrazu obsługuje wyświetlanie obrazu określonego przez adres pliku w pamięci tymczasowej lub w bazie danych.

W tym celu należy ustawić atrybut typu string we właściwości Data elementu formularza. Wartość tego atrybutu będzie interpretowana jako adres obrazka.

Przykład // Wiązanie pola obrazu z adresem obrazu w // tymczasowym magazynie. AdresPictures formularza szczegóły typu string

PlaceFile (adres obrazu, prawda)

Picture.Data = AdresZdjęcia

Ograniczenia podczas pracy z klientem internetowym

Działanie opisywanego mechanizmu podczas korzystania z klienta WWW ma pewne ograniczenia. Ograniczenia te są związane z modelem bezpieczeństwa przeglądarki. Na przykład klient nie może samodzielnie zapisać pliku w lokalnym systemie plików, to znaczy dostępna jest tylko interaktywna wersja metod klienta PlaceFile() i GetFile(). Podczas próby użycia trybu nieinteraktywnego zgłaszany jest wyjątek. Okna dialogowe wyświetlane interaktywnie zależą od typu przeglądarki.

Funkcje podczas pracy z Value Storage na kliencie

Problem:

Gdy Dokument ma w sekcji tabelarycznej atrybut typu Przechowywanie wartości, powoduje to spowolnienie otwierania formularza dokumentu, jeśli ten atrybut zawiera duże dane.

Domniemany powód:

Być może podczas otwierania formularza do klienta nie wysyłany jest link do danych znajdujących się w Value Store, ale same dane.

Rozwiązanie

  • We właściwościach atrybutu tabeli formularza znajduje się flaga "Zawsze używaj". Jeśli jest ustawiona, zawartość pola jest zawsze przesyłana pomiędzy serwerem a klientem - np. podczas otwierania formularza. Ta flaga musi być wyłączona, ale należy to wziąć pod uwagę w kodzie, ponieważ domyślnie na kliencie nie będzie wartości tego pola. Przykład można znaleźć w 1C:Archive.

Jeszcze lepiej jest używać tymczasowe przechowywanie do przesyłania plików pomiędzy klientem a serwerem.

Materiał zaktualizowany, aby pasował do Drupala 8.7.0+

Sklep tymczasowy(pamięć tymczasowa) - umożliwia tymczasowe przechowywanie dowolnych danych. Jest to rodzaj przechowywania danych w $_SESSION, ponieważ ten magazyn jest zwykle powiązany z określonym użytkownikiem. Ale nie używa $_SESSION i przechowuje wszystko w systemie (w bazie danych).

Rdzeń zawiera dwie usługi tymczasowego przechowywania danych, tempstore.private i tempstore.shared. Działają identycznie, ale private zawsze przechowuje dane dla konkretnego użytkownika. Oznacza to, że wywołanie jednego klucza z magazynu prywatnego zwróci różne dane dla każdego użytkownika. Udostępnione jest dostępne dla każdego użytkownika.

Zakres stosowania tych usług i ich przechowywania może być bardzo szeroki. Na przykład przechowuj niektóre tymczasowe wartości formularzy, a jeśli użytkownik ich nie zapisał, można je przywrócić z tego magazynu na przykład dla niektórych formularzy REST, a nawet odpowiednich dla zwykłych. Ogólnie rzecz biorąc, do czego masz wystarczającą wyobraźnię lub zadania. Można to na przykład zastosować w przypadku niektórych formularzy kontrolowanych poza Drupalem, na przykład w React lub Vue.

Wartości w tych magazynach domyślnie żyją przez 604800 sekund (1 tydzień), po czym są automatycznie usuwane.

Aby zmienić tę wartość. Będziesz musiał połączyć, na przykład, sites/default/services.yml i przedefiniować go:

Parametry: # 10 sekund tempstore.expire: 10

Ale to nie powinno mieć miejsca.

Przyjrzyjmy się możliwościom każdego urządzenia pamięci masowej; chociaż są podobne, różnią się nieco.

tempstore.private - prywatna pamięć

Ta pamięć jest prywatna dla każdego użytkownika.

tempstore.shared — pamięć współdzielona

Ta pamięć jest współdzielona i może zawierać dane wspólne dla wszystkich użytkowników.

W repozytorium dostępne są następujące metody:

  • get($key): Pobiera wartość ze sklepu według klucza. Jeśli nie ma danych, zwróci NULL, jeśli są, zwróci wartość.
  • getIfOwner($key): Pobiera wartość ze sklepu według klucza. Jeśli nie ma danych lub dane nie zostały zapisane pod bieżącym użytkownikiem, zwróci wartość NULL, jeśli są i zostały zapisane pod bieżącym użytkownikiem, zwróci wartość.
  • setIfNotExists($key, $value) : Zapisuje wartość $value pod kluczem $key do magazynu tylko wtedy, gdy aktualnie nie ma danych dla tego klucza. Zwraca wartość PRAWDA, jeśli została zarejestrowana, FAŁSZ, jeśli dane zostały już zarejestrowane.
  • setIfOwner($key, $value) : Zapisuje wartość $value pod kluczem $key do pamięci tylko wtedy, gdy aktualnie nie ma danych lub właścicielem rzeczywistych danych jest bieżący użytkownik.
  • set($key, $value) : Zapisuje wartość $value pod kluczem $key do magazynu.
  • getMetadata($key): Zwraca metadane dla określonego $key bez danych. Jest to obiekt zawierający właściwość właściciela, w której przechowywana jest wartość, kto jest właścicielem wartości, oraz zaktualizowaną właściwość - uniksowy znacznik czasu czasu zapisania tej wartości.
  • usuń($klucz): Usuwa dane powiązane z danym kluczem $ z pamięci.
  • DeleteIfOwner($key): Usuwa dane powiązane z danym $key z pamięci, tylko jeśli dane należą do bieżącego użytkownika.

Jak się nazywają?

Małe przykłady, jak je nazwać.

Pierwszym krokiem jest uzyskanie magazynu tymczasowego wymaganej pamięci, następnie z magazynu uzyskuje się „kolekcję”, w której dane są już przechowywane pod niezbędnymi kluczami. Z reguły nazwa „kolekcji” jest równa nazwie modułu.

Użyj Drupal\Core\TempStore\PrivateTempStoreFactory; użyj 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("nazwa użytkownika", "Drupal"); /** @var SharedTempStoreFactory $shared_tempstore */ $shared_tempstore = \Drupal::service("tempstore.shared"); $my_shared_storage = $shared_tempstore->get("dummy"); $my_shared_storage->set("nazwa użytkownika", "Drupal");

Przykład

W przykładzie utworzymy formularz na stronie /temp-store-form z dwoma polami, z których jedno będzie przechowywać wiadomość w pamięci prywatnej, a drugie w publicznej.

Utwórz formularz:

Src/FormWithTempStore.php

privateTempStore = $private_temp_store->get("dummy"); $this->sharedTempStore = $shared_temp_store->get("dummy"); ) /** * (@inheritdoc) */ publiczna funkcja statyczna create(ContainerInterface $container) (zwróć nową statyczną($container->get("tempstore.private"), $container->get("tempstore.shared") ); ) /** * (@inheritdoc) */ funkcja publiczna getFormId() ( return "form_with_temp_store"; ) /** * (@inheritdoc) */ funkcja publiczna buildForm(array $form, FormStateInterface $form_state) ( $form ["private_message"] = [ "#type" => "textarea", "#title" => $this->t("Prywatna wiadomość"), "#required" => PRAWDA, "#description" => $ this->t("Ta wartość będzie prywatna dla każdego użytkownika."), "#default_value" => $this->privateTempStore->get("message"), ]; $form["shared_message"] = [ " #type" => "textarea", "#title" => $this->t("Udostępniona wiadomość"), "#required" => TRUE, "#description" => $this->t("Ta wartość zostanie udostępniony wszystkim użytkownikom."), "#default_value" => $this->sharedTempStore->get("message"), ]; $form["actions"] = ["#type" => "actions" ]; $form["actions"]["submit"] = [ "#type" => "prześlij", "#value" => $this->t("Save"), ]; zwróć formularz $; ) /** * (@inheritdoc) */ funkcja publiczna SubmitForm(array &$form, FormStateInterface $form_state) ( $this->privateTempStore->set("message", $form_state->getValue("private_message")); $this->sharedTempStore->set("wiadomość", $form_state->getValue("shared_message")); ) )

Drukuj (Ctrl+P)

1C:Enterprise posiada mechanizm pracy z pamięcią tymczasową, który zapewnia przechowywanie niektórych danych związanych z sesją.
Dodatkowo zaimplementowano mechanizm pracy z plikami, który zapewnia wymianę plików pomiędzy bazą danych a aplikacją kliencką. Osobliwością tego mechanizmu jest to, że jest on przeznaczony do użytku w cienkim kliencie i kliencie internetowym i został zaprojektowany z uwzględnieniem ograniczeń w pracy z plikami nałożonych przez przeglądarki internetowe.

Magazynowanie tymczasowe

Jest to wyspecjalizowany magazyn informacji, w którym można umieścić wartość. Głównym celem jest tymczasowe przechowywanie informacji podczas interakcji klient-serwer, zanim zostaną one przesłane do bazy danych. Mechanizm magazynu tymczasowego wraz z mechanizmem obsługi plików stanowi zestaw, za pomocą którego można umieścić w magazynie tymczasowym bazy informacji dane przechowywane lokalnie na komputerze użytkownika, przenieść te informacje z magazynu tymczasowego do bazy danych i uzyskać go z powrotem do komputera użytkownika. Najczęstsze problemy aplikacji rozwiązywane przez te mechanizmy to przechowywanie informacji towarzyszących, np. zdjęć towarów, dokumentów związanych z umowami itp. Mechanizmy tymczasowego przechowywania i pracy z plikami są często używane razem, ale można je również stosować osobno.
Konieczność przechowywania tymczasowego powstaje np. dlatego, że model przeglądarki internetowej wymaga, aby wybrany przez użytkownika plik został przesłany bezpośrednio na serwer bez możliwości przechowywania go na kliencie. Po przesłaniu pliku jest on umieszczany w magazynie tymczasowym i można go następnie wykorzystać podczas zapisywania obiektu w bazie danych.
Możesz używać magazynu tymczasowego jako magazynu uniwersalnego z kontrolowanym czasem życia danych:

1. Jeżeli w momencie umieszczania danych w magazynie tymczasowym zostały one powiązane z określoną formą, wówczas czas życia przechowywanych danych zależy od oczekiwanej długości życia formy, z którą dane są związane. Po usunięciu obiektu formularza pamięć tymczasowa zostanie wyczyszczona ze wszystkich powiązanych z nim informacji.

2. Jeżeli przy umieszczaniu danych w czasowym przechowywaniu nie doszło do zakończenia powiązania z formularzem, wówczas tymczasowe przechowywanie zostanie usunięte w następujących przypadkach:

  • Następnym razem, gdy poprosisz o formularz.
  • Przy następnym wywołaniu serwera ze wspólnego modułu klienta.
  • Dla kontekstowych i niekontekstowych wywołań klientów z formularza.
  • Gdy jest wywoływany po stronie serwera z modułu poleceń. Jeśli zostanie wykonane wywołanie serwera w celu umieszczenia wartości w magazynie tymczasowym, nie zostanie wykonane żadne czyszczenie. Czyszczenie następuje po zakończeniu działania połączenia.

Oznacza to, że możesz umieścić jedną lub więcej wartości w magazynie tymczasowym i użyć tej wartości w następnym wywołaniu. Jednakże po użyciu i przed zakończeniem wywołania serwera umieszczona wartość zostanie automatycznie usunięta.

Najbardziej typowym problemem aplikacyjnym rozwiązywanym przez tymczasowe przechowywanie jest udostępnienie plików lub zdjęć zanim obiekt zostanie zapisany w bazie informacji, np. w postaci elementu. Organizując taki dostęp, zaleca się przesyłanie danych z komputerów klienckich na serwer dokładnie w postaci plików, bez wcześniejszej „konwersji” na dokument tekstowy, dokument arkusza kalkulacyjnego i podobne formaty systemu 1C:Enterprise. Zaleca się przesłanie pliku na stronę serwera i po stronie serwera załadowanie danych pliku do żądanego miejsca
format systemu 1C:Enterprise.
Dane umieszczone w pamięci identyfikowane są poprzez unikalny adres, który można później wykorzystać przy operacjach zapisu, odczytu czy usuwania. Adres ten jest podawany metodami zapisu wartości do pamięci tymczasowej. Odrębna metoda w języku wbudowanym pozwala określić, czy przekazany adres jest adresem wskazującym na dane znajdujące się w magazynie tymczasowym.
Magazyn tymczasowy utworzony w jednej sesji nie jest dostępny w innej sesji. Wyjątkiem jest możliwość przeniesienia danych z zadania w tle do sesji, która zainicjowała zadanie w tle, przy użyciu magazynu tymczasowego.

Burty . Najbardziej akceptowalnym sposobem przechowywania ziemniaków, warzyw korzeniowych i białej kapusty jest butelkowanie. Stos to podłużny nasyp, nachylony z obu stron i pokryty materiałem izolacyjnym od góry. Przeznaczony jest do przechowywania zbiorów przez jeden sezon. Burty można zmielić, gdy ziemniaki wylewa się na płaską powierzchnię, i półzmielić, gdy wykopie się płytkie doły. Stos Popunautny (zakopany). W przypadku takiego stosu wykopuje się dół o głębokości 25 cm w kierunku z północy na południe. Najlepsza szerokość dołu dla sadzeniaków wynosi 170-200 cm. Do krótkotrwałego przechowywania zdrowych ziemniaków można wykonać szerszy nasyp (do 4 m). Długość wykopu może być dowolna, ale mimo to lepiej jest, gdy nie jest większa niż 20-25 m. Wysokość nasypu pala, przy jego szerokości u podstawy 2 m, może wynosić 90- 100 cm Zazwyczaj ziemniaki są przechowywane w kilku stosach w jednym miejscu. Miejsce wiercenia zlokalizowane jest w pobliżu upraw ziemniaków, w miejscu niezalewanym przez wodę deszczową i roztopową, niedaleko drogi. Wzdłuż osi środkowej wykopu wykopany jest kanał wentylacyjny o szerokości i głębokości 20-25 cm, który wystaje poza dół i jest o 25 cm dłuższy od przykrycia na końcu kołnierza. Część kanału wystającą poza granice wykopu szczelnie przykrywa się od góry deskami, tak aby do wykopu i kanału nie dostała się ziemia. W kołnierzach gruntowych kanał wentylacyjny umieszczony jest bezpośrednio na powierzchni gruntu i wykonany jest w formie namiotu kratowego złożonego z oddzielnych półtorametrowych odcinków. Aby zapobiec przedostawaniu się słomy i ziemi do kanału wentylacyjnego, jego końce wykonano bez szczelin. Do zakrycia kanałów wentylacyjnych przygotowuje się wcześniej profile kratowe o długości 1,5 m i szerokości 0,5 m. Sekcja składa się z listew o szerokości 2-3 cm i odstępu między nimi 2-2,5 cm. Profile układa się na kanale wentylacyjnym i mocuje do nawzajem. Powstała ciągła kratka wentylacyjna zakrywa część kanału znajdującą się pod produktem. Podczas formowania kopca z ziemniaków lub innych produktów wewnątrz umieszcza się termometr kołnierzowy lub specjalnie wykonane czworościenne tuby o przekroju wewnętrznym 3x3 cm, w które na końcu pręta wkłada się termometry. Wentylacja kołnierzy odbywa się poprzez kalenicę i kanał wentylacyjny. Stosy przykryte są słomą i ziemią. Słomę pełnej grubości układa się gęstą warstwą od dołu do góry, tak aby czubek pala zachodził na siebie. Następnie stos posypuje się po bokach cienką warstwą ziemi. Grzbiet pryzma pozostaje pod słomą aż do pierwszych przymrozków. W deszczową pogodę jest tymczasowo przykryty papą lub folią z tworzywa sztucznego. Podczas schładzania ziemniaków do +4°C przed wystąpieniem trwałych przymrozków kanały wentylacyjne szczelnie przykrywa się słomą, a pryzma całkowicie przykrywa się ziemią. Jeżeli temperatura w pryzmach spadnie poniżej +1°C, pale dodatkowo przykrywa się materiałami termoizolacyjnymi – torfem, słomą, obornikiem lub śniegiem. W przypadku obfitych opadów śniegu powodujących nadmierne przykrycie pryzm, należy je okresowo odśnieżać.

Magazyn wykopów . Ta metoda przechowywania wymaga 2 razy mniej słomy lub innych materiałów termoizolacyjnych niż w przypadku przechowywania w pryzmach. Rowy stosuje się, gdy woda gruntowa jest głęboka. Głębokość i szerokość rowu wynosi od 60–80 cm (w regionach południowych) do 1,5–2 m (na Syberii). Rowy przykrywa się na wierzchu warstwą słomy: w regionach centralnych jest to 30-40 cm, na Syberii - do 70 cm, następnie wylewa się warstwę ziemi (od 40 do 70 cm w zależności od strefy). Zwykle stosuje się różne rodzaje rowów: płytkie, głębokie z kanałami wentylacyjnymi, z warstwą gleby i bez warstwy oraz zwykłe. Rowy i pale są wyposażone w (naturalną) prostą wentylację. Jego głównym przeznaczeniem jest schładzanie ziemniaków i warzyw jesienią. Zasada działania wentylacji nawiewno-wywiewnej opiera się na różnicy ciśnień powietrza, tj. na ciąg ruchu powietrza w górę ze względu na różnicę temperatur w stosie produktów i na zewnątrz. Ciepłe powietrze, które jest lżejsze, wychodzi przez rurę wydechową, a zimne powietrze wchodzi przez kanał nawiewny. System wentylacji składa się z kanałów nawiewnych i wywiewnych. Kanał wlotowy przebiega pośrodku podstawy kołnierza, na jego końcach znajdują się wyjścia na zewnątrz. W stosach z ziemniakami i warzywami korzeniowymi wykonują rowek o przekroju 20x20 cm lub 30x30 cm, przykryty deskami kratowymi, listwami poprzecznymi lub chrustem, aby poszczególne egzemplarze produktu nie wypadały. Przez ten kanał zimniejsze powietrze zewnętrzne napływa do komina grawitacyjnie. Ogrzane powietrze z komina usuwane jest kanałami wywiewnymi (rurami). Są to skrzynki czworościenne wykonane z desek o przekroju 20x20 cm lub 15x15 cm, w dolnej części, przechodząc przez warstwę warzyw, wykonane są z siatki, a w górnej części, przechodząc przez wiatę, są solidne aby ziemia do nich nie wpadła. Nad nimi zamontowany jest daszek, który chroni produkty przed wodą deszczową. Rury wydechowe, w zależności od właściwości i jakości przechowywanych warzyw, instaluje się na długości stosu co 2-4 m. Jedną z wad pionowych rur wydechowych jest to, że ciepłe i wilgotne powietrze jest usuwane tylko z sąsiednich obszarów komina, a odległe obszary są słabo chłodzone. Woda wpływa w pobliżu rur wydechowych, pocąc się i zamrażając produkty, ponieważ tutaj schron jest mniej gęsty i niezawodny. Dlatego stosuje się wentylację kalenicową. Podczas przechowywania warzyw w suchą, chłodną pogodę grzbiet rowu pokryty jest wyłącznie słomą, przez którą usuwane jest ciepłe powietrze. Takie warunki są jednak rzadkie, a jesienią pogoda często jest deszczowa. W takich przypadkach instaluje się poziomy kanał wyciągowy - deski sklejone pod kątem 90°, które układa się na stosie warzyw z wyjściem na końcach na zewnątrz. W takim przypadku rów wzdłuż redliny można od razu przykryć słomą i ziemią, bez obawy, że słoma zamoknie i zamarznie produkt. Wystarczy na czas zamknąć otwory końcowe. Przewaga poziomego kanału kalenicowego nad pionowymi rurami wyciągowymi polega również na tym, że w tym przypadku ciepłe i wilgotne powietrze jest usuwane równomiernie z całego stosu produktów.

Dół. Najprostszym miejscem przechowywania jest dół ziemny - przeznaczony do przechowywania najczęściej niewielkiej partii ziemniaków, a czasami także roślin okopowych. Wykopuje się go na wzniesieniu, przy niskim poziomie wód gruntowych. W zależności od gęstości gleby wykopuje się ją prostymi lub pochyłymi ścianami. Najbardziej akceptowalnym kształtem wgłębień jest okrągły, jednak czasami wykonuje się je w kształcie prostokąta. W gęstej gliniastej glebie wykopuje się dziurę w kształcie dzbanka. Nie zaleca się tego robić na glebie piaszczystej, ponieważ zapadnie się. Wykop dziurę w następujący sposób: narysuj okrąg o średnicy 1 m i wykop szyjkę dzbanka, a następnie kopiąc głębiej, stopniowo poszerzaj dół do szerokości 2-2,5 m średnicy. Głębokość dzbanka powinna wynosić 1,5-2 m. Aby zapobiec przedostawaniu się stopionej wody do dołu, wokół otworu szyjki układa się wałek z usuniętej gliny. Magazyn taki przykryty jest pokrywą umieszczoną na skarpie, aby umożliwić spływanie wody deszczowej. Dobrze wykonany dzbanek typu pit wytrzymuje 30-40 lat bez naprawy. Zimą utrzyma bardziej stałą temperaturę i wilgotność niż w zwykłej piwnicy. Ziemniaki w takim dole nie pocą się i nie kiełkują przez długi czas. Ziemniaki przechowuje się w małych dołach bez wentylacji. W dużych rurę wentylacyjną instaluje się z desek lub czterech palików wbitych w dno wykopu i owiniętych słomianym sznurem. Ziemniaki są opuszczane do dołu za pomocą wiadra. Do wiadra przywiązane są dwie liny: jedna do uchwytu, druga do dna. Gdy wiadro dotrze do podłogi, pociągnij za linkę przymocowaną do dna. W tym samym czasie wiadro się przewraca i ziemniaki się wysypują. Ta metoda zasypywania nie powoduje uszkodzeń bulw. Po napełnieniu dzbanka ziemniakami szyjkę zamyka się słomą i pokrywką. Przez pierwsze dwa tygodnie ziemniaki oddychając wydzielają dużo wilgoci, dlatego warstwa słomy nie powinna być gruba. Później warstwę dostosowuje się do 50-70 cm, w zależności od lokalnych warunków zimowych.

Drukuj (Ctrl+P)

W tej sekcji opisano najczęstsze zastosowania mechanizmu pracy z magazynem tymczasowym i plikami.

Zapisywanie danych z pliku do pamięci tymczasowej

Umieszczenie jednego pliku

Metoda PlaceFile() umieszcza plik z lokalnego systemu plików w magazynie tymczasowym. Metoda może przyjąć adres w pamięci tymczasowej, pod którym powinien zostać zapisany plik. Jeżeli adres nie jest zdefiniowany lub jest pustym ciągiem znaków, wówczas zostanie utworzony nowy adres, a metoda zwróci go poprzez specjalny parametr.
Notatka. Ilość danych przesyłanych pomiędzy klientem a serwerem w jednym wywołaniu metody PutFile().
Jeżeli parametr określający interaktywny tryb działania ma wartość True, to metoda wyświetli standardowe okno dialogowe wyboru pliku, w którym można wybrać plik do umieszczenia w pamięci. W tym przypadku metoda zwróci także adres wybranego pliku.
Metoda zwraca w rezultacie False, jeśli użytkownik interaktywnie odmówił wykonania operacji w oknie dialogowym wyboru pliku.

Umieszczenie zestawu plików

metoda Pliki miejsc() umieszcza wiele plików w magazynie tymczasowym podczas jednego połączenia. Istnieje kilka różnych sposobów wykorzystania tej metody:
● wstępnie wygeneruj listę plików do dodania np. po wcześniejszym wybraniu plików do umieszczenia w bazie informacji;
● przekazać metodzie maskę wyszukiwania plików, np. gdy chcesz umieścić w bazie informacyjnej wszystkie pliki określonego typu, np. wszystkie zdjęcia;
● przekazać do metody wcześniej przygotowany obiekt Okno wyboru pliku w trybie otwierania pliku.
Po zakończeniu pracy metoda może zwrócić listę faktycznie dodanych plików.

// FileList – atrybut postaci typu ValueList,
// zawierający listę dodanych plików
FileArray = Nowa tablica;
Dla każdego Elementu Listy z Cyklu Lista Plików
FileArray.Add(NewDescriptionofTransferFile(ListElement,));
Koniec cyklu;
Umieszczone pliki= Nowa tablica;
Wynik = PlaceFiles(ArrayFiles, PlacedFiles, False, UniqueIdentifier);

Uwaga 1: Aby skorzystać z metody Pliki miejsc() Klient sieciowy wymaga podłączenia rozszerzenia do przetwarzania plików.
Uwaga 2: Ilość danych przesyłanych pomiędzy klientem a serwerem podczas jednego wywołania metody Pliki miejsc(), nie powinna przekraczać 4 Gb (w formie serializowanej).

Umieszczanie danych w magazynie tymczasowym

Metoda jest podobna do metody PlaceFile() z tą różnicą, że dane mają być zapisane w pamięci tymczasowej
nie są reprezentowane jako ścieżka w systemie plików, ale jako wartość. Podobnie, jeśli w pamięci tymczasowej nie określono żadnego istniejącego adresu, tworzony jest nowy adres. W wyniku działania funkcji zwracany jest adres. Podobnie jak w przypadku plików, zamieszczane dane muszą należeć do jakiejś formy i po ich usunięciu są automatycznie usuwane.
Notatka. Ilość danych przesyłanych między klientem a serwerem na wywołanie metody PlaceInTemporaryStorage(), nie powinna przekraczać 4 Gb (w formie serializowanej).
Uwaga! Po umieszczeniu w magazynie tymczasowym wartość nie jest w rzeczywistości serializowana. Odniesienie do wartości jest umieszczane i przechowywane w pamięci podręcznej przez 20 minut. Po tym okresie wartość jest serializowana, zapisywana na dysku (przechowywanie danych sesji) i usuwana z pamięci podręcznej.

Pobieranie danych z magazynu tymczasowego

Podczas zapisywania obiektu do bazy danych może zaistnieć potrzeba wyodrębnienia danych z magazynu tymczasowego i umieszczenia ich na przykład w atrybucie obiektu bazy danych. Jest na to specjalna metoda - GetFromTemporaryStorage(). Ta metoda pobiera dane z magazynu tymczasowego i zwraca je jako wynik wykonania. Aby otrzymać dane należy tymczasowo podać adres
składowanie. Adres ten jest zwracany przez metody umieszczania danych w magazynie tymczasowym, jeśli się powiodą (patrz poprzednie sekcje).
Uwaga! Pobierając wartość z magazynu tymczasowego na serwerze należy wziąć pod uwagę, że jest ona uzyskiwana przez odniesienie. W rzeczywistości ten link wskazuje wartość przechowywaną w pamięci podręcznej. W ciągu 20 minut od momentu umieszczenia w pamięci lub od chwili ostatniego dostępu do niej wartość zostanie zapisana w pamięci podręcznej, a następnie zapisana na dysku i usunięta z pamięci podręcznej. Przy następnym dostępie do wartości jest ona ładowana z dysku i umieszczana z powrotem w pamięci podręcznej.
Po deserializacji i przywróceniu wartości z magazynu tymczasowego referencje nie są przywracane. Wartość pamięci podręcznej jest przywracana z dysku. Ale po serializacji/deserializacji nie można przywrócić odniesień do innych obiektów wewnątrz wartości.

Usuwanie danych z magazynu tymczasowego

Po zapisaniu danych w atrybucie obiektu infobase, dane w magazynie tymczasowym można usunąć. Jest na to metoda
Usuń z tymczasowej pamięci(), który dokonuje usunięcia. Metoda przyjmuje jako parametr adres w pamięci tymczasowej.

Sprawdzanie adresu tymczasowego przechowywania

Adres może wskazywać zarówno tymczasowe przechowywanie, jak i szczegóły w bazie informacji. Istnieje metoda sprawdzenia jego typu
To jestTemporaryStorageAddress(). Sprawdza, czy przekazany adres jest adresem wskazującym na sklep. Zwraca True, jeśli adres wskazuje na pamięć tymczasową.

Otrzymanie adresu rekwizytów

Po umieszczeniu danych w atrybucie obiektu infobase może zaistnieć potrzeba uzyskania do nich dostępu przy użyciu metod plikowych.
Zanim jednak otrzymasz dane np. z nieruchomości, musisz poznać adres tej nieruchomości. Jest na to metoda PobierzLinkNawigacyjny().

Może zwrócić adres wartości w bazie danych na podstawie oryginalnych parametrów. Aby to zrobić, musisz przekazać klucz obiektu (może to być
zarówno link do obiektu, jak i klucz wpisu do rejestru informacji) oraz nazwę atrybutu. Jeśli chcesz uzyskać adres wartości zapisanej w atrybucie
części tabelarycznej, to do nazwy atrybutu w parametrze określającym nazwę atrybutu należy dodać nazwę części tabelarycznej i kropkę „.”. Na przykład: Produkty.Obraz

Pobieranie pliku z bazy danych

Odbieranie jednego pliku

Metoda GetFile() pobiera plik z bazy danych i zapisuje go w lokalnym systemie plików użytkownika. Pierwszy parametr określa adres pliku w atrybucie obiektu infobase lub w tymczasowym magazynie plików. Zapisanie nie nastąpi jeżeli użytkownik w imieniu którego wykonywana jest operacja nie posiada uprawnienia Widok do szczegółów obiektu infobase. Drugi parametr określa lokalizację, w której zapisywany jest plik wynikowy. W trybie nieinteraktywnym należy określić ścieżkę. W trybie interaktywnym parametrem jest
opcjonalny.
Domyślnie metoda jest wykonywana interaktywnie. Oznacza to, że zostanie wygenerowane okno dialogowe, w którym możesz określić akcję na odebranym pliku: uruchomić go lub zapisać w określonej przez użytkownika lokalizacji w systemie plików. Jeśli zostanie wybrany tryb interaktywny i nie zostanie określona opcja Nazwa pliku, operacja otwarcia pliku nie będzie dostępna. Metoda zwraca wartość logiczną. Fałsz oznacza, że ​​użytkownik zdecydował się anulować operację w interaktywnym oknie dialogowym zapisywania pliku.

Odbieranie zestawu plików

Metoda GetFiles() umożliwia odebranie i zapisanie kilku plików przechowywanych w bazie danych w lokalnym systemie plików użytkownika. Lista przesłanych plików przekazywana jest jako parametr.

// FileList – lista wartości zawierająca linki do elementów
// katalog, w którym znajdują się przesłane pliki
// Lista reprezentacji wartości to nazwa przesyłanego pliku
FileArray = Nowa tablica;
Dla każdego Elementu Listy z Cyklu Lista Plików
Plik = nowy Plik(String(ListElement.Value));
OdbierzPlik = Nowy Opis przesyłanego pliku;
OdbierzPlik.Nazwa = ListaElement.Widok;
OdbierzPlik.Storage= P getNavigationLink(ListItem.Value, „Dane”);
FileArray.Add(Plik odbierający);
Koniec cyklu;
Otrzymane pliki= Nowa tablica;
Wynik = Odbierz pliki (FilesArray, Otrzymane pliki, UploadedFilesPath, Fałsz);
Jeśli NIE wynik to
Wiadomość = Nowa Wiadomość do użytkownika;
Wiadomość.Tekst = „Błąd podczas odbierania plików!”;
Wiadomość.Wiadomość();
KoniecJeśli ;

Po zakończeniu metoda może zwrócić listę faktycznie pobranych plików, wskazując pełną nazwę każdego zapisanego pliku.
NOTATKA. Aby skorzystać z metody GetFiles() w kliencie WWW, należy podłączyć rozszerzenie pliku. Jeżeli właściwość Nazwa obiektu Opis przesyłanego pliku zawiera bezwzględną ścieżkę do pliku, plik zostanie zapisany w tej ścieżce, niezależnie od parametru Lokalizacja pliku.
Parametrem Lokalizacja pliku może być ścieżka w lokalnym systemie plików lub obiekt File Selection Dialog w trybie wybierania katalogu lub zapisywania plików. Jeżeli wartość parametru Lokalizacja pliku określony obiekt Okno wyboru pliku w trybie
zapisując pliki, a następnie:

● okno dialogowe będzie wywoływane dla każdego przesłanego pliku, z wyjątkiem plików, dla których właściwość Nazwa obiektu Opis przesyłanego pliku zawiera ścieżkę bezwzględną;
● wartość właściwości obiektu Nazwa Opisu Przesyłanego Pliku zostanie użyta jako początkowa nazwa pliku w oknie dialogowym;
● jeżeli dla dowolnego pliku zostanie wybrana odmowa zapisu, to nazwa obiektu Opis właściwości Przesłany plik będzie zawierała pusty ciąg znaków;
● metoda GetFiles() zwróci wartość True, jeżeli chociaż jeden plik został odebrany pomyślnie;
● należy wziąć pod uwagę, że pliki faktycznie odbierane są po udzieleniu przez użytkownika odpowiedzi na pytania dotyczące podania nazwy i ścieżki
wszystkie otrzymane pliki;
● jeżeli użytkownik w imieniu którego wykonywana jest metoda GetFile() nie posiada prawa View do przynajmniej jednego atrybutu obiektu infobase, z którego pobierane są pliki, cała operacja zakończy się niepowodzeniem.
Przykład:

TransferredFiles = Nowa tablica;
Opis = Nowy Opis przesyłanego pliku(„Opis”, Adres Pliku);
Przesłane pliki. Dodaj(Opis );
FileSelect = Nowy FileSelectionDialog(FileSelectionDialogMode.Save);
FileSelect.Nagłówek= „Zapisz archiwum”;
Wybór pliku.Rozszerzenie= „zamek błyskawiczny”;
Wybierz plik.Filtr= „Archiwum(*.zip)|*.zip|Wszystkie pliki|*.*”;
FileSelect.FilterIndex = 0;
Odbierz pliki (TransferFiles, SelectFile, False);

Jeśli zostanie wybrany interaktywny tryb wyboru katalogu do zapisywania plików, klient WWW poprosi dodatkowo o pozwolenie na zapisanie plików określonych ścieżkami bezwzględnymi. W przypadku zapisu nieinteraktywnego (ścieżka do katalogu jest podana w odpowiednim parametrze) żądanie zostanie wykonane dla całej listy zapisanych plików.

Przykład użycia metod plikowych

// Interaktywne pobieranie pliku z dysku
// i umieszczenie go w magazynie tymczasowym.
&Na kliencie
Procedura Wybierz plik dyskowyIWrite()
Zmienna wybrana nazwa;
Perem Adres tymczasowego przechowywania;
NowyObiekt = Obiekt.Link.Empty();
Jeśli PlaceFile(TemporaryStorageAddress, „”, SelectedName, True) Następnie
Obiekt.NazwaPliku = WybranaNazwa;
PlaceObjectFile (TemporaryStorageAddress);
koniecJeśli;
Koniec procedury
// Kopiowanie pliku z magazynu tymczasowego do rekwizytów
// katalog, zapisanie obiektu, usunięcie pliku z tymczasowego
// składowanie.
&Na serwerze
Procedura PlaceObjectFile (tymczasowy adres przechowywania)
Element katalogu = Form AttributesValue(“Obiekt”);
Dane binarne = GetFromTemporaryStorage(TemporaryStorageAddress);
Element katalogu. Dane pliku= Nowy Wartości przechowywania (Dane binarne, NowaKompresjaDanych()) ;
Plik = nowy Plik (element katalogu. Nazwa pliku);
Pozycja katalogu.NazwaPliku = Nazwa.Pliku;
Element katalogu.Write();
Zmodyfikowano = Fałsz;
DeleteFromTemporaryStorage(TemporaryStorageAddress);
Value – FormAttributes (Element katalogu, „Obiekt”);
Koniec procedury
// Odczytaj plik z rekwizytów i zapisz go
// na dysku lokalnym w trybie interaktywnym.
&Na kliencie
Procedura Przeczytaj plik i zapisz na dysku()
Adres = GetNavigationLink(Object.Link,"FileData");
GetFile(Adres, Obiekt.NazwaPliku, Prawda);
Koniec procedury

Zezwolenie na wykonanie grupy operacji na plikach

Podczas wykonywania niektórych operacji w kliencie internetowym może być konieczne uzyskanie pozwolenia na wiele operacji na plikach.
Na przykład musisz pobrać dokument z bazy danych, a następnie otworzyć zapisany dokument za pomocą powiązanej aplikacji.
Aby wykonać tę operację należy odpowiedzieć na pytanie o zapisanie dokumentu oraz o konieczność jego uruchomienia. Jeśli będzie więcej operacji, użytkownik będzie miał także więcej pytań.
Aby zmniejszyć liczbę pytań, możesz skorzystać z tej metody. Podczas korzystania z tej metody
Użytkownikowi wyświetlana jest lista wszystkich operacji, które są zaplanowane do wykonania i proszony o zezwolenie na wykonanie grupy operacji. Jeśli użytkownik zezwolił na wykonanie, żądane operacje zostaną wykonane bez dodatkowych żądań skierowanych do użytkownika. Jeśli pozwolenie nie zostanie udzielone, operacje będą przebiegać normalnie: jedno żądanie na operację.
NOTATKA. Aby skorzystać z metody Poproś o pozwolenie użytkownika() W kliencie internetowym musisz włączyć rozszerzenie do zarządzania plikami.
Spójrzmy na przykład użycia metody:

Jeśli ConnectExtensionPraca z plikami() Następnie
Link = GetNavigationLink(Object.Link, „FileData”);
// Tworzenie opisu przesyłanych plików (w tym przypadku jest tylko jeden plik)
Przesłane pliki= Nowa tablica;
Opis = Nowy opis przesyłanego pliku (obiekt. nazwa pliku, łącze);
TransferredFiles.Add(Opis);
// Przygotuj obiekt do odbierania informacji o odebranych plikach
Przesłane pliki= Nowa tablica;

// Zdefiniuj inne parametry metody
KatalogZapisz= „c:\temp”;
Interaktywny = Fałsz;
Przesłana nazwa pliku = Zapisywanie katalogu + „\” + Obiekt.NazwaPliku;
// Przygotuj opis metod uzyskiwania uprawnień
Metody = Nowa tablica;

Metody.Add(“GetFiles”);
Metody.Add(TransferFiles);
Metody.Add(TransferredFiles);
Metody.Add(Zapisz katalog);
Metody.Dodaj (interaktywne);
Metody.Add(Nowa tablica);
Metody.Add(„Uruchom aplikację”);
Metody.Add(NazwaPrzeniesionego Pliku);
Jeśli nie RequestUserPermission (metody) Następnie
Warning("Użytkownik odmówił pozwolenia.");
Powrót;
koniecJeśli;
GetFiles(TransferFiles, TransmittedFiles, SavingDirectory, Interactive);
UruchomAplikację(NazwaPrzeniesionego Pliku);
W przeciwnym razie
Warning("Wykonanie nie jest obsługiwane. Rozszerzenie pliku nie zostało zainstalowane.");
koniecJeśli;

Należy zwrócić uwagę na kilka cech tej metody ŻądanieUprawnienia Użytkownika().

1. Zezwolenie wymagane jest wyłącznie w przypadku następujących metod:

GetFiles()/StartGettingFiles(),
● PlaceFiles()/StartPlaceFiles(),
● FindFiles()/StartSearchFiles(),
● KopiujPlik()/StartCopyFile(),
● MoveFile()/StartMovingFile(),
●DeleteFiles()/StartDeleteFiles(),
● Utwórz katalog()/Rozpocznij tworzenie katalogu(),
● LaunchApplication()/StartRunApplication().

2. Wymagane jest zezwolenie na określony zestaw parametrów metody. Jeżeli podczas faktycznego wykonywania metody manipulacji plikami wartości parametrów będą różnić się od tych, dla których uzyskano zezwolenie, zezwolenie to nie będzie ważne, a użytkownik otrzyma osobną prośbę o potwierdzenie operacji.

3. Jeżeli zachodzi potrzeba wykonania dwóch (lub więcej) identycznych operacji na plikach (nawet z tym samym zestawem parametrów), należy podać odpowiednią liczbę elementów w tablicy parametrów metody Poproś o pozwolenie użytkownika(). Na przykład, jeśli chcesz dwukrotnie pobrać ten sam plik z bazy danych i umieścić go w ustalonej lokalizacji w systemie plików, powinieneś poprosić o pozwolenie
na dwie operacje.

4. Jeśli żądane jest pozwolenie na operację wykonującą operację interaktywną (na przykład funkcja GetFiles(), jako parametr przekazywany jest obiekt Okno wyboru pliku), wówczas taka operacja jest wykluczona z żądania.

Przyznane uprawnienia są zachowywane do czasu wykonania autoryzowanego wywołania lub do zakończenia wykonywania wbudowanego języka.
NOTATKA. U grubych i cienkich klientów Poproś o pozwolenie użytkownika() Metoda zawsze zwraca True, bez interakcji użytkownika.

Praca z magazynem tymczasowym w zadaniu w tle

Mechanizm pracy z magazynem tymczasowym ma możliwość przeniesienia danych z zadania w tle do sesji, która zainicjowała zadanie w tle.
W przypadku takiego przelewu należy umieścić pustą wartość w pamięci tymczasowej w sesji nadrzędnej (przy pomocy metody PlaceInTemporaryStorage()), podając dowolny identyfikator tworzonego magazynu tymczasowego (parametr Adres). Następnie przekaż otrzymany adres do zadania w tle poprzez parametry zadania w tle. Ponadto, jeśli w zadaniu w tle adres ten jest używany jako wartość parametru Adres metody PlaceInTemporaryStorage(), wówczas wynik zostanie skopiowany do sesji, z której uruchomiono zadanie w tle.
Dane umieszczone w magazynie tymczasowym w zadaniu w tle nie będą dostępne z sesji nadrzędnej do czasu zakończenia zadania w tle.

Obsługa adresów w polu obrazu

Element formularza Pole widoku Pole Obraz umożliwia wyświetlanie obrazu określonego przez adres wartości (który może być obrazem lub danymi binarnymi) w magazynie tymczasowym lub w bazie danych.
W tym celu należy ustawić atrybut typu string we właściwości Data elementu formularza. Wartość tego atrybutu będzie interpretowana jako adres obrazka.

// Przykład 1
// Tymczasowe powiązanie pola obrazu z adresem obrazu
// składowanie. AddressPictures – szczegóły formularza typu string
PlaceFile (Adres Obrazu, Nazwa Początkowa, Nazwa Wybrana, Prawda, Unikalny Identyfikator);
// Przykład 2
// Uzyskanie adresu obrazu z atrybutu obiektu
//baza informacji
FilePictures = Obiekt.FilePictures;
Jeśli nie PictureFile.Empty() to
ImageAddress = GetNavigationLink(ImageFile, „FileData”);
W przeciwnym razie
Adres obrazu = „”;
Nieskończony;

Dostęp do standardowych katalogów

Podczas korzystania z systemu wymagana jest pewna ilość miejsca w systemie plików, w którym można przechowywać różne dane plikowe, które z jednej strony mają charakter tymczasowy, z drugiej strony muszą być przechowywane dość długo. Do plików takich zaliczają się wersje robocze systemów zarządzania dokumentami, komponenty zewnętrzne działające po stronie komputera klienckiego itp.
Do przechowywania takich plików przeznaczony jest specjalny katalog, który jest powiązany z konkretnym użytkownikiem określonej bazy informacji.
Ten sam użytkownik pracujący z dwiema bazami danych będzie miał dostęp do dwóch różnych katalogów do przechowywania danych użytkownika. Położenie tego katalogu określa się metodą Katalog danych użytkownika roboczego (). Jeżeli katalog nie istnieje, zostanie on utworzony przy pierwszym dostępie. Jeśli nie można utworzyć katalogu, system zgłasza wyjątek.
NOTATKA. Metoda UserDataWorkDirectory() nie jest dostępna po stronie serwera.
System operacyjny posiada specjalny katalog przeznaczony do trwałego przechowywania danych użytkownika. To może być jakiś
raporty, drukowane formularze dokumentów itp. W tym katalogu umieszczane są dane, które można później przesłać na zewnątrz
konsumentom. Aby uzyskać dostęp do tego katalogu, używana jest metoda DocumentDirectory(). Fizyczna lokalizacja katalogu różni się w zależności od systemu operacyjnego.
system, w którym wykonywana jest aplikacja i jest wymieniony w asystencie składni.