1s 8.3 read sačuvajte datoteku na serveru. Morate ispravno kreirati privremene datoteke

Opseg primene: upravljana aplikacija, mobilna aplikacija, uobičajena aplikacija.

1. Kada pristupate datotekama i direktorijima sistema datoteka iz konfiguracijskog koda, treba imati na umu da je pristup njima ograničen korisničkim pravima operativni sistem, u ime kojeg se aplikacija pokreće.

1.1. Ako pristupite sistem podataka izvršeno iz koda koji se pokreće na klijentu, izvršava se pod pravima korisnika u čije ime se aplikacija pokreće (tanki, debeli ili web klijent). Obično je to trenutni korisnik operativnog sistema.

1.2. Ako se sistemu datoteka pristupa iz koda koji se izvodi na serveru, tada:

  • kada se koristi baza podataka klijent-server, pristup je ograničen pravima korisnika u čije ime radi server 1C:Enterprise (*);
  • Kada se koristi baza podataka datoteka objavljena na web serveru, pristup je ograničen pravima korisnika u čije ime radi web server.

Rad sa privremenim fajlovima i direktorijumima

Ako trebate koristiti privremene datoteke i direktorije, morate se pridržavati sljedećih zahtjeva:

1. Da biste dobili naziv privremene datoteke, koristite metodu GetTemporaryFileName. Inače je moguće netačan rad konfiguracije u višekorisničkom režimu, sa omogućenim sigurnosnim profilima, problemi sa pravima pristupa datotekama operativnog sistema.

Pogrešno:

IntermediateFileName = "C:/Privremene datoteke 1C/TempFile.xml"Data.Write(IntermediateFileName);

U trenutni korisnik Možda nemate dozvolu za pisanje u navedeni direktorij. Osim toga, pokretanje ovog koda iz dvije različite sesije u isto vrijeme će izazvati grešku.

desno:

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);

Kada koristite ovu funkciju, dobit će se jedinstveno ime i zajamčen je pristup datoteci.

2. Za kreiranje privremenog imenika, također se preporučuje korištenje imena dobivenog metodom GetTemporaryFileName. Ovo osigurava da je ime kreiranog direktorija jedinstveno kada radite u višekorisničkom načinu. Nakon toga možete kreirati druge direktorije i datoteke unutar kreiranog direktorija bez ograničenja.

3. Prilikom izvršavanja koda na web klijentu ili u rijetkim slučajevima, ako rad u višekorisničkom načinu rada nije potreban (na primjer, ažuriranje baze podataka o datotekama, ekskluzivni način), morate koristiti funkciju za formiranje imena datoteke ili direktorija Direktorij privremenih datoteka.

vidi takođeZnačajke razvoja konfiguracija za Linux OS, o posebnostima korištenja imena datoteka i putanja.

4. Nakon završetka rada sa privremenom datotekom ili direktorijumom, morate ga sami izbrisati. Ne možete računati na automatsko uklanjanje datoteke i direktorije sljedeći put kada pokrenete platformu, to može dovesti do iscrpljivanja slobodan prostor u direktoriju privremenih datoteka.

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);//Rad sa datotekom...//Brisanje privremene datoteke Pokušaj brisanja datoteka(IntermediateFileName);Exception LogRegistration(NStr("ru = "Moj mehanizam. Action"") , LogLevel.Error, ErrorDetailView(ErrorInfo()));EndAttempt;

Vidi također:Korištenje dnevnika.

5. Kada koristite privremene datoteke i direktorije na serveru, morate u potpunosti prekinuti rad s njima unutar jednog poziva servera. Prilikom pokretanja konfiguracije pomoću klastera servera, sljedeći put kada pozovete ove datoteke, ove datoteke mogu postati nedostupne, jer će kod početi da se izvršava na drugom računaru. Ako trebate sačuvati podatke između poziva servera unutar iste sesije, trebali biste koristiti privremenu memoriju platforme (metode, ).

5. 1. U rijetkim slučajevima može biti potrebno prenijeti podatke u privremenim datotekama između sesija, na primjer, kada se pripremaju podaci za pozadinski posao, kada organizirate dugotrajan proces koji opslužuje nekoliko uzastopnih poziva web servisu. Neophodno je samostalno osigurati zajamčenu zajedničku lokaciju za pohranu, prava pristupa datotekama sa različitih mjesta njihove obrade, brisanje datoteka nakon isteka vremena njihove obrade ili nenormalan završetak procesa obrade. Preporučuje se sljedeći pristup:

  • Da bi se osigurao pristup sa svih mogućih lokacija za obradu, kreira se konstanta za pohranjivanje zajedničke putanje do datoteka kojima se može pristupiti sa svih servera u klasteru;
  • Kada se kreiraju privremeni fajlovi, njihova imena se unose u registar pomoćnih informacija, čuvajući vreme kada je fajl kreiran;
  • Tokom normalnog toka procesa, posljednja operacija kojoj su potrebni fajlovi, prije njenog završetka, briše i sam fajl i unose o njima u pomoćnom registru;
  • Pomoćni rutinski zadatak periodično provjerava prisustvo unosa u pomoćnom registru, čiji životni vijek očigledno premašuje normalno vrijeme završetka procesa. Kada se takvi unosi otkriju, zadatak briše privremene datoteke i unose o njima.

Prijenos datoteka između klijenta i servera

1. Kada istovremeno radite sa datotekom na klijentu i serveru, morate koristiti prijenos datoteka kroz privremenu memoriju (metode PlaceFile, PlaceFiles, Get file, GetFiles, StartFilePlace, Stavite u privremeno skladište, Primite iz privremenog skladišta). Općenito, klijent i klaster serveri su različitim računarima sa različitim sistemima datoteka, a pristup datotekama se može dogoditi pod od strane različitih korisnika OS sa različitim pravima.

Pogrešno:

&OnClientProcedureFileProcessing() ...FileName = "C:/Datoteke za obradu/Download.xml"; Rezultat = Izvrši obradu na serveru (ime datoteke); ...EndProcedure&OnServerFunction PerformProcessingOnServer(FileName) Reading = NewTextReading(FileName) ... Rezultat = Reading.Read(); Vrati rezultat;EndFunction

desno:

&OnClientProcedureFileProcessing() ...FileNameForProcessing = "C:/Datoteke za obradu/Download.xml"; Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False); Rezultat = Izvrši obradu na serveru(adresa); ...EndProcedure&OnServerFunction Izvršite obradu na serveru(Adresa) Podaci = GetFromTemporaryStorage(Adresa) IntermediateFileName = GetTemporaryFileName("txt"); Data.Write(IntermediateFileName); Read = Novi ReadText(IntermediateFileName) ... Rezultat = Read.Read(); ...DeleteFiles(IntermediateFileName); Vrati rezultat;EndFunction

2. Za spremanje podataka u privremenu memoriju između nekoliko poziva servera, kada ih stavljate u pohranu, morate koristiti parametar UniqueFormIdentifier metoda PlaceFile prosljeđivanjem identifikatora trenutnog obrasca u njega. Takve vrijednosti će biti izbrisane iz njihove privremene memorije samo kada se navedeni obrazac zatvori. U tom slučaju, kada se isti fajl ponovo stavlja u privremenu memoriju, prethodna vrijednost mora biti obrisana ručno. Na primjer:

Pogrešno:

FileNameForProcessing = "C:/Datoteke za obradu/Download.xml"; ... // Prvi poziv servera Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Rezultat = Izvrši InitialProcessingOnServer(Adresa);
... // Drugi poziv servera sa istom verzijom datoteke Rezultat = Izvrši IntermediateProcessingOnServer(Adresa); ...
// Treći poziv servera sa nova verzija Adresa datoteke = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Rezultat = Izvrši FinalProcessingOnServer(Adresa); ...

Ovo će ostaviti dvije kopije datoteka u privremenoj memoriji obrasca. Adresa druge kopije će biti u varijabli Adresa, a adresa prve kopije će biti izgubljena. To dovodi do potrošnje dodatnih resursa aplikacije i usporavanja.

desno:

FileNameForProcessing = "C:/Datoteke za obradu/Download.xml"; ... // Prvi poziv servera Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Rezultat = Izvrši InitialProcessingOnServer(Adresa); ... // Drugi poziv servera sa istom verzijom datoteke Rezultat = Izvrši IntermediateProcessingOnServer(Adresa); ...
// Poziv trećeg servera s novom verzijom datoteke DeleteFromTemporaryStorage(Address); Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Rezultat = Izvrši FinalProcessingOnServer(Adresa); ...

vidi takođe

Nalaze nas: pristup sistemu datoteka, GetTemporaryFileName(


Ispričaću vam jedan slučaj iz moje prakse. Jednog dana sam morao da podesim upload podataka 1c računovodstvo iz nereplicirane konfiguracije. Istovar je bio u vidu posebne obrade, po pravilima razmene. Sama pravila su priložena kao binarni raspored podataka. Algoritam rada je tipičan - pravila se učitavaju u privremenu datoteku, a zatim se obrađuju " Univerzalna razmjena podaci u XML formatu."

Programer pravila transfera i obrade tukao se u prsa i kleo se da mu sve radi savršeno. U praksi se konstantno javljala greška prilikom učitavanja podataka. U tekstu poruke o grešci otvoreno je navedeno da problem leži u pravilima razmjene. “Dokument više nema ovo svojstvo, odbijam ga učitati”, stoji u tekstu poruke. Nisam želeo da se petljam sa pravilima razmene, jer... To nije moj posao. Umjesto toga, otvorio sam kod za obradu i odlučio da vidim kako je organiziran proces učitavanja pravila razmjene u privremenu datoteku.

Ispostavilo se da je upravo to problem. Činjenica je da se programer nije potrudio da napravi jedinstveno ime datoteke za pravila razmjene (u privremenom direktoriju), pa je čak ubacio ček: „Ako datoteka postoji, tada nije potrebno učitavanje.“ Naravno, sve je radilo do obrade, odnosno raspored sa pravilima nije ažuriran. Kao rezultat toga, korisnici su stalno pokušavali da uploaduju koristeći zastarjela pravila razmjene. “Privremena datoteka” u direktoriju “temp” postala je trajna i dok je ne izbrišete ručno, uvijek će se koristiti za otpremanje.

Morate ispravno kreirati privremene datoteke

Da biste izbjegli takve smiješne situacije, ne biste trebali pokušavati iznova izmisliti kotače i štake u obliku "škakljivih" funkcija koje koriste COM objekte. Dovoljno je koristiti funkciju ugrađenu u platformu - GetTemporaryFileName(), koji automatski rješava mnoge probleme:

Osigurava da je ime datoteke zaista jedinstveno;

Ako programer zaboravi da sam izbriše fajl, on će definitivno biti obrisan sledeći put kada se platforma pokrene.

Automatsko brisanje privremenih fajlova tokom ponovnog pokretanja platforme je veoma interesantna karakteristika koja teoretski omogućava programeru da ignoriše potrebu za samim brisanjem datoteka. Istina, to ipak nije vrijedno zloupotrebe. Ako se kod izvršava na serveru, onda morate shvatiti da se server možda neće ponovo pokrenuti dugo vremena, što znači da će se privremeni folder začepiti nepotrebni fajlovi. S tim u vezi, ne biste trebali u potpunosti vjerovati platformi „prljavom“ poslu. Bolje je koristiti ovu funkciju kao rezervnu opciju i dodati jedan dodatni red koda svom kodu kako biste prisilili uklanjanje privremene datoteke.

Dakle, koja je poenta mog članka?

1. Postoji server (x64), sa instaliranim Office 2016 (x64), postoji 1C 8.3.8 i x64 (što znači 1C server). Korisnici se povezuju putem tankog klijenta i web klijenta.

2. Postoji gomila standardnih ugovora i faktura koje izdaje (pripremi) odjel prodaje. Postoji font, pasus itd., Naravno, sve je dizajnirano u Wordu, Excelu 2016 (x64), naravno, nema želje da se sve to nacrta u 1C, ali postoji želja da se to stavi u ActiveDocument format rasporedi

Rešenje deluje banalno :) , neću opisivati ​​cijeli mehanizam, kako se to radi, kako se podaci iz 1C popunjavaju u ActiveDocument izgled - mislim da to savršeno dobro znate i bez mene. Ali tokom rada postalo je jasno da u kraljevstvu nije sve tako glatko COM objekat ov, i to:

2. Koju opciju je bolje izabrati: ActiveDocument ili Binarni podaci? Iako mi to zvuči kao da biram Votku s pivom ili Pivo s votkom :) . Ništa strašno, potrebno je popuniti dokumente podacima iz 1C i prenijeti ih klijentu.

Pa dobro, preskočimo stihove, biram ActiveDocument, neću opisivati ​​cijeli algoritam, samo ću navesti zamke i njihova rješenja. Sve navedeno u nastavku je moja lična spekulacija i ni na koji način ne tvrdi da je konačna istina. Možda ste riješili ove probleme ili ih drugačije riješili.

1. Kamen" prvo". Metoda SaveAs ne radi (i za MSWord i za MSExcel). Kada pokušavate napisati binarne podatke, 1C se jednostavno ruši. Pogledajte fragment liste:

MSWord = Layout.Get(); Pokušajte Document = MSWord.Application.Documents(1); Document.Activate(); //Sljedeće, nekako dobivamo podatke i popunjavamo Word dokument //Nabavljamo putanju u privremenom direktoriju za spremanje datoteke tamo TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //kamen počinje ovdje MyDocumentInBinaryData = New BinaryData(NameTime); //pa, evo ovaj kamen je nokautirao 1C :) MSWord.Application.Quit();

Hvala puno.

Kreiranje foldera
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problem je riješen. Tema zatvorena.

Šta je razlog? Razlog je taj kod

MSWord = Layout.Get();

Uvek poziva instancu COM objekta (x32) bez obzira na to koji bitnost je Office instaliran. Jeste li se ikada zapitali zašto ne možete umetnuti datoteke s ekstenzijom docx, xlsx u izgled ActoveDocumenta?

ovo se takođe može proveriti preko Task Manager-a, ali činjenica je da ActiveDocument raspored implicitno poziva COM instancu (x32) i stoga se sve dalje manipulacije moraju obaviti uzimajući u obzir ovu funkciju.

1. Server i sav softver moraju biti x32. Tada ne morate ništa raditi (u smislu ponovnog pisanja koda)

2. Ili prepišite kod na ovaj način

// dobijemo ime privremene datoteke TimeFile = GetTemporaryFileName("doc"); // ovaj kod će definitivno pozvati COM instancu potrebne dubine bita, u našem slučaju x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DokumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // onda je sve kao prije Layout = Print Management Izgled obrasca ("Dokument. Zakon o prijenosu opreme." + Naziv Layout-a). MSWord = Layout.Get(); Pokušajte Document = MSWord.Application.Documents(1); Document.Activate(); // ovdje radimo nešto, popunjavamo podatke // ovdje ćemo ponovo sačuvati našu datoteku iz COM x62 u COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DokumentN = MSWord.Application.Documents.Open(TimeFile); DocumentH.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = Nedefinisano; Izuzetak // Ako dođe do greške, podaci o grešci se ispisuju i objekt se zatvara. Informacije = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Greška - "+Information.Description+" kod greške - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndAttempt;

Mislim da je ovdje sve jasno, prvo smo kreirali COM instancu potrebne dubine bita, napravili praznu datoteku i spremili je u privremenu mapu, zatim radimo sa COM x32, popunjavamo je podacima i na kraju kopiramo sadržaj cijele dokument i snimite ga u prethodno pripremljenu datoteku.

Sve je isto, ali samo za Excel

TimeFile = GetTimeFileName("xls"); Excel = Novi COMObject("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); ListN = KnjigaN.Radni listovi(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Dokument.Faktura za opremu."+LayoutName); MSExcel = Layout.Get(); BookH = MSExcel.Application.Workbooks.Open(TimeFile); ListN = KnjigaN.Radni listovi(1); Pokušaj WBook = MSExcel.Application.Workbooks(1); List = WBook.WorkSheets(1); Sheet.Activate(); // uradimo nešto, ispunimo to podacima iz 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookH.Close(); Izuzetak // Ako dođe do greške, podaci o grešci se ispisuju i objekt se zatvara. Informacije = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Greška - "+Information.Description+" kod greške - "+Abstract(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

Izvoli " prvo“Odlučio sam se za kamen, na x64 serveru sa Office x64, sve radi kao sat, bez grešaka i nema potrebe za kreiranjem foldera i svega ostalog.

kamen" sekunda". isječak koda

TimeFile = GetTimeFileName("xls");

jelo nije baš dobro, jer piše u folder: "c:\Users\ šta ima...", generalno, ovaj folder je uvek na crnoj listi svih firewall-a, antivirusa, itd itd., na barem otvorite sigurnosni kontrolni centar u Wordu ili Excelu. Pogledajmo i tamo

Morat ćete se pozabaviti ovim, inače postoji mogućnost pojave „čudnih“ grešaka. Stoga predlažem sljedeće:

1. Otvorite konfigurator i dodajte novi registar informacija

ovdje ćemo pohraniti našu gotovu riječ, Excel fajlovi već popunjeno, naravno:

LayoutName - ID rasporeda

DocumentOffice - Pohrana vrijednosti, ovdje čuvamo našu gotovu datoteku

2. Gornji kod dodajemo na sljedeći način:

MH = Information Registers.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.Read(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); DeleteFiles(TimeFile);

Ono što radimo je da upišemo gotovu datoteku u registar informacija, a zatim izbrišemo samu privremenu datoteku, rješavajući problem “Word, Excel sigurnosni centar”. Sve što ostaje je da se ovaj gotov fajl pokaže klijentu (tanki i web klijenti)

3. Kamen" treće" - prijenos fajla na klijenta, ovdje ću samo postaviti sav kod, neki preuzet iz BSP-a, dio iz demo konfiguracije "Managed Application", neki sa interneta, ali općenito evo koda (u njegovom u cijelosti)

/////////////////////////////////////////////// // ////////////////////////// // SERVISNE PROCEDURE I FUNKCIJE BSP &OnServer funkcija GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Ključ za snimanje = Informacijski registri CreateRecordKey("Object,LayoutName",ObjectLink,LayoutName)); // Adresa = GetNavigationLink(RecordKey,"OfficeDocument"); Povratna adresa; EndFunction // &OnClient procedura AfterApplicationStart(ReturnCode, ApplicationName) Export; // Kraj procedure &na klijentovom postupku nakon prijema datoteka (prenesenih datoteka, dodatnih parametara) Izvoz Ako NISU prenesene datoteke = nedefinirano Onda za svaki opis prenesenih datoteka ciklus OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication.NameObject", ThisObject ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; endIf; EndProcedure &OnClient Procedura AfterDirectorySelection(SelectedFiles, CommandName) Export If SelectedFiles = Undefined then Return; endIf; Direktorij = Odabrani fajlovi; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); Ako je CommandName = "Faktura" Tada LayoutName = "Faktura" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Kraj procedure &na klijentskoj proceduri Otvaranje datoteka putem ekstenzije (ime komande) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Direktorij = GeneralPurposeCallServer.GetWorkingDirectory(); Ako je Direktorij = Nedefinirano ILI Direktorij = "" Onda Dialog = Novi FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = NStr("ru = "Odabir direktorija za privremeno skladištenje datoteka"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Else SelectedFiles = Novi niz; SelectedFiles.Add(Directory); Izvrši obradu upozorenja(OpAfterSelectingDirectory, SelectedFiles); endIf; Kraj procedure &na klijentskoj proceduri ProcessConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient procedura Connected_PassFileToClient() Adresa = GetLayout(); Ako Adresa<>Undefined Onda DisableWaitHandler("Connectable_SendFileToClient"); Broj dokumenta = DataStructure.DocumentNumber; Direktorij = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Direktorij+"\"+LayoutName+"_No"+DocumentNumber+".xls"; Opis = Novi opis prenesene datoteke (putanja do datoteke, adresa); TransferredFiles = Novi niz; TransferredFiles.Add(Opis); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; Kraj procedure &na serverskoj proceduri ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Novi niz; Niz objekata.Dodaj(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Niz objekata,LayoutName,True); EndProcedure &OnClient procedura Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = novaStructure; DataStructure.Insert("Objekat", Veza); DataStructure.Insert("LayoutName", "Faktura"); ConnectWaitingHandler("Connectable_Print", 1, Tačno); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Počnite instalirati File Work Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // Kraj StandardSubsystems.Print

Nekoliko pojašnjenja:

1. Prvo, naš klijent radi i kroz Thin i Web način rada, tako da unaprijed postavljamo sljedeće vrijednosti u svojstvima konfiguratora:

Da biste izbjegli probleme pri radu sa pretraživačem

2. Koristimo rukovaoce čekanja kako bismo izbjegli probleme sa sinhronizacijom poziva (ovo se odnosi samo na web način rada)

3. I na kraju, povežite ekstenziju za rad sa datotekama (zapamtite to u modu Tanki klijent, ova ekstenzija je uvijek omogućena). I kroz kod:

prenosimo datoteku klijentu pomoću mehanizma navigacijske veze, primamo sljedeće poruke u pretraživaču (Thin radi sam):

Pa, izgleda da je to sve. Nadam se da će ovo nekome pomoći...

Što se tiče Worda, Excel datoteke umetnute kao binarni podaci? šta je problem?

1. Moramo ili izvući ove binarne podatke iz izgleda i ispuniti ih podacima iz 1C i PAŽNJA ih ponovo zapisati u obliku binarnih podataka (Vodka s pivom ili Pivo s votkom)

2. Ili moramo dobiti raspored BinaryData na strani klijenta i popuniti ga tamo, ALI COM objekat podržava samo IE pretraživač i onda sa plesovima sa ActiveX postavkama, drugi pretraživači su odavno napustili upotrebu ActiveX-a

Tehnološka platforma 1C:Enterprise 8 vam omogućava da uštedite baza informacija proizvoljne datoteke, nabavite ih odatle i koristite ih Različiti putevi. Pogledajmo ove operacije koristeći primjere.

Prije učitavanja datoteke u bazu podataka 1C, morate dobiti punu adresu datoteke na disku. Rad s dijalozima za odabir datoteka opisan je u .

Za pohranjivanje datoteka koristite atribut (ili registarski resurs) s tipom StorageValues.

Prijenos proizvoljne datoteke u bazu podataka 1C

Bilo koja datoteka može biti predstavljena kao binarni podatak i učitana u Value Storage.

Prilikom pretvaranja binarnih podataka u objekt StorageValues korišten dizajn nove StorageValues ​​(podaci, kompresija) sa dva parametra:

  1. Podaci— binarni podaci koji se moraju pohraniti u memoriju
  2. Kompresija— omjer kompresije algoritma deflacije. Cijeli broj u rasponu -1...9. -1 je zadani nivo kompresije. 0 - nema kompresije, 9 - maksimalna kompresija. Zadana vrijednost: -1. Parametar je opcioni, ako nije naveden, onda se kompresija ne koristi.

//Pretvorite datoteku u binarne podatke
Fajl = Novi binarni podaci (putanja) ;

//Kreirajte novi objekt za pohranu vrijednosti

DataStorage = NewValueStorage(File, NewDataCompression(9) ) ;

Spremanje proizvoljne datoteke iz 1C infobaze na disk

Da biste spremili datoteku iz 1C baze podataka na disk, morate odrediti stazu i naziv datoteke. Da biste to učinili, postoji dijalog za spremanje datoteke, rad s kojim je opisan u.

//Nabavite binarne podatke iz skladišta
//Skladištenje podataka - atribut objekta s tipom pohrane vrijednosti

//Upis primljenih podataka na disk
//IN varijabla Put je puna adresa datoteke na disku
Podaci. Pisanje (putanja) ;

Pregledanje datoteke koja se nalazi u bazi podataka 1C

Da biste vidjeli datoteku sačuvanu u bazi podataka, morate imati instaliranu aplikaciju na vašem računaru koja otvara datoteku.

//Nabavite ime privremene datoteke sa potrebnom ekstenzijom
//U varijablu Extension morate staviti ekstenziju datoteke, na primjer "pdf"
Putanja = GetTemporaryFileName(Extension) ;

//Primanje podataka iz skladišta
//Skladištenje podataka - atribut objekta s tipom pohrane vrijednosti
Podaci = Skladište podataka. Get() ;

//Upisivanje podataka u privremenu datoteku
Podaci. Pisanje (putanja) ;

//Pokušavam otvoriti datoteku u predviđenoj aplikaciji
//Ako aplikacija nije pronađena, pojavit će se sistemski dijalog "Otvori sa...".
LaunchApplication (putanja) ;

Vrlo često korisnici doživljavaju čudne greške: program radi ispravno za jednog korisnika, ali za drugog, u blizini, na drugom računaru, radi potpuno drugačije. Često se, nakon dugih istraživanja, ispostavi da je uzrok takvih "kvarova" u 1C 8 keš memorija.

U nastavku ću vam reći šta je 1C keš memorija i kako je očistiti.

Keširanje— proces kreiranja bafera često korišćenih i, po pravilu, statičnih informacija. Keširanje se koristi za ubrzavanje programa, posebno u 1C, konfiguracijske datoteke se učitavaju na korisnikovo računalo kako ih ne bi zahtijevale svaki put od servera.

Međutim, vrlo često 1C platforma ne rukuje pravilno keširanjem konfiguracije i kao rezultat toga dobijamo neprikladno ponašanje konfiguracije.

Razlozi za nepravilno ponašanje mogu biti različiti: ažuriranja dinamičke konfiguracije, kvarovi softvera ili hardvera.

Prva metoda je ručno brisanje keš memorije 1C

Za rješavanje problema i "kvarova" 1C obično pomaže brisanje keš memorije 1C 8.3 platforme.

To se radi na sljedeći način:

korak 1

Pronađite direktorij u kojem su pohranjene 1C privremene datoteke, mogu se vidjeti u meniju postavki na IB listi:

Korak 2

Imamo adresu kao

Nabavite 267 video lekcija na 1C besplatno:

C:\Documents and Settings\korisničko ime\Application Data\1C\1Cv82\tmplts\1c

Predmemorije se nalaze na adresi

C:\Documents and Settings\korisničko ime\Application Data\1C\1Cv82\

*gdje je korisničko ime sistemsko korisničko ime, a folder 1Cv82 može se razlikovati ovisno o verziji 1C platforme

Kada smo otišli tamo, nalazimo mnoge (broj fascikli jednak broju konfiguracija) zanimljivih fascikli:

Svi odabrani direktoriji su cache baze podataka 1C i mogu se sigurno izbrisati. Prije brisanja morate izaći iz sistema sigurnosti informacija.

Ako ne želite da tražite gdje se datoteke nalaze, možete koristiti poseban program(bat fajl), koji čisti fascikle sa privremenim datotekama - preuzimanje . Imajte na umu da ih koristite na vlastitu odgovornost. Oni sadrže sljedeću naredbu:

rmdir "%AppData%\1C\1Cv8" /S /Q
rmdir "%LOCALAPPDATA%\1C\1Cv8" /S /Q

Drugi način za brisanje 1C privremenih datoteka je uklanjanje baze podataka s liste

Druga metoda je jednostavnija, ali nije sasvim ispravna. Da biste je očistili, samo izbrišite ovu konfiguraciju i kreirajte novu sa istim putem do informacione sigurnosti.

Kao rezultat toga, stari folder sa keš memorijom će se „odvojiti“ od ovog sistema informacione bezbednosti i kreiraće se novi direktorijum.

To možete učiniti, keš memorija se briše, ali privremene datoteke ostaju na tvrdom disku.

Treći metod je ClearCache parametar

Potrebno je unijeti naredbu u dodatne parametre pokretanja (u listi baza podataka, tipka Promjena, zadnja kartica) /ClearCache. Primjer upotrebe:

Video o čišćenju keša u 1C programima:

Ako "kvarovi" u 1C ne nestanu nakon brisanja keša, a 1C ne radi kako biste željeli, možete se obratiti.

Ako počinjete učiti 1C programiranje, preporučujemo naše besplatni kurs(nemoj zaboraviti pretplatite se na YouTube - redovno se objavljuju novi video zapisi):