1s 8.3 prečítanie uložte súbor na server. Musíte správne vytvoriť dočasné súbory

Rozsah aplikácie: riadená aplikácia, mobilná aplikácia, bežná aplikácia.

1. Pri prístupe k súborom a adresárom súborového systému z konfiguračného kódu by ste mali mať na pamäti, že prístup k nim je obmedzený používateľskými právami operačný systém, v mene ktorej aplikácia beží.

1.1. Ak máte prístup k systém súborov vykonávaný z kódu spusteného na klientovi, je vykonávaný pod právami užívateľa, v mene ktorého aplikácia beží (tenký, hrubý alebo webový klient). Zvyčajne ide o aktuálneho používateľa operačného systému.

1.2. Ak sa k systému súborov pristupuje z kódu spusteného na serveri, potom:

  • pri použití informačnej databázy klient-server je prístup obmedzený právami používateľa, v mene ktorého beží server 1C:Enterprise (*);
  • Pri použití databázy súborov zverejnenej na webovom serveri je prístup obmedzený právami používateľa, v mene ktorého web server beží.

Práca s dočasnými súbormi a adresármi

Ak potrebujete použiť dočasné súbory a adresáre, musíte splniť nasledujúce požiadavky:

1. Ak chcete získať názov dočasného súboru, použite metódu GetTemporaryFileName. Inak je to možné nesprávna práca konfigurácie vo viacužívateľskom režime, so zapnutými bezpečnostnými profilmi, problémy s prístupovými právami k súborom operačného systému.

nesprávne:

IntermediateFileName = "C:/Dočasné súbory 1C/TempFile.xml"Data.Write(IntermediateFileName);

U súčasný užívateľ Možno nemáte oprávnenie na zápis do určeného adresára. Okrem toho spustenie tohto kódu z dvoch rôznych relácií súčasne spôsobí chybu.

Správny:

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

Pri použití tejto funkcie sa získa jedinečný názov a je zaručený prístup k súboru.

2. Na vytvorenie dočasného adresára sa tiež odporúča použiť názov získaný pomocou metódy GetTemporaryFileName. To zaisťuje, že názov vytvoreného adresára je jedinečný pri práci v režime pre viacerých používateľov. Potom môžete vo vytvorenom adresári bez obmedzení vytvárať ďalšie adresáre a súbory.

3. Pri vykonávaní kódu na webovom klientovi alebo v zriedkavých prípadoch, ak nie je potrebná práca v režime pre viacerých používateľov (napríklad aktualizácia informačnej databázy súborov, výhradný režim), musíte použiť funkciu na vytvorenie názvu súboru alebo adresára Adresár dočasných súborov.

pozri tiežFunkcie vývoja konfigurácií pre OS Linux, o zvláštnostiach používania názvov súborov a ciest.

4. Po ukončení práce s dočasným súborom alebo adresárom ho musíte sami vymazať. Nemôžete počítať automatické odstránenie súbory a adresáre pri ďalšom spustení platformy to môže viesť k vyčerpaniu voľné miesto v adresári dočasných súborov.

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);//Práca so súborom...//Odstránenie dočasného súboruPokus o vymazanie súborov(IntermediateFileName);Výnimka LogRegistration(НStr("ru = "Môj mechanizmus. Action"") , LogLevel.Error, ErrorDetailView(ErrorInfo()));EndAttempt;

Pozri tiež:Používanie knihy jázd.

5. Pri používaní dočasných súborov a adresárov na serveri musíte úplne ukončiť prácu s nimi v rámci jedného volania servera. Pri spustení konfigurácie pomocou klastra serverov sa pri ďalšom volaní týchto súborov môžu tieto súbory stať nedostupnými, pretože kód sa spustí na inom počítači. Ak potrebujete uložiť údaje medzi volaniami servera v rámci tej istej relácie, mali by ste použiť dočasné úložisko platformy (metódy , ).

5. 1. V zriedkavých prípadoch môže byť potrebné prenášať údaje v dočasných súboroch medzi reláciami, napríklad pri príprave údajov pre úlohu na pozadí alebo pri organizovaní dlhodobého procesu, ktorý slúži na niekoľko po sebe idúcich volaní webovej služby. Je potrebné samostatne zabezpečiť garantované spoločné miesto uloženia, práva na prístup k súborom z rôznych miest ich spracovania, vymazanie súborov po uplynutí doby ich spracovania alebo abnormálne ukončenie procesu spracovania. Odporúča sa nasledujúci prístup:

  • Na zabezpečenie prístupu zo všetkých možných umiestnení spracovania sa vytvorí konštanta na uloženie spoločnej cesty k súborom, ku ktorým možno pristupovať zo všetkých serverov v klastri;
  • Keď sa vytvoria dočasné súbory, ich názvy sa zapíšu do pomocného informačného registra, pričom sa zachová čas vytvorenia súboru;
  • Počas normálneho priebehu procesu posledná operácia, ktorá potrebovala súbory, pred jej dokončením vymaže samotný súbor aj záznamy o nich v pomocnom registri;
  • Pomocný rutinná úloha pravidelne kontroluje prítomnosť záznamov v pomocnom registri, ktorých životnosť zjavne presahuje bežný čas dokončenia procesu. Keď sa takéto položky zistia, úloha vymaže dočasné súbory a záznamy o nich.

Prenos súborov medzi klientom a serverom

1. Pri súčasnej práci so súborom na klientovi a serveri musíte použiť prenos súborov cez dočasné úložisko (metódy PlaceFile, PlaceFiles, Získajte súbor, GetFiles, ŠtartFilePlace, Umiestnite do dočasného úložiska, Príjem z dočasného úložiska). Vo všeobecnosti sú to klientske a klastrové servery rôzne počítače s rôznymi súborovými systémami a prístup k súborom môže prebiehať pod rôznymi používateľmi OS s rôznymi právami.

nesprávne:

&OnClientProcedureFileProcessing() ...FileName = "C:/Súbory na spracovanie/Download.xml"; Výsledok = Perform ProcessingOnServer(FileName); ...EndProcedure&OnServerFunction PerformProcessingOnServer(FileName) Reading = NewTextReading(FileName) ... Result = Reading.Read(); Return Result;EndFunction

Správny:

&OnClientProcedureFileProcessing() ...FileNameForProcessing = "C:/Súbory na spracovanie/Download.xml"; Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False); Výsledok = Perform ProcessingOnServer(Address); ...EndProcedure&OnServerFunction Vykonať spracovanieNaServeri(Adresa) Údaje = GetFromTemporaryStorage(Address) IntermediateFileName = GetTemporaryFileName("txt"); Data.Write(IntermediateFileName); Read = New ReadText(IntermediateFileName) ... Result = Read.Read(); ...DeleteFiles(IntermediateFileName); Return Result;EndFunction

2. Ak chcete uložiť údaje do dočasného úložiska medzi niekoľkými volaniami servera, pri ich ukladaní do úložiska musíte použiť parameter UniqueFormIdentifier metóda PlaceFile odovzdaním identifikátora aktuálneho formulára do nej. Takéto hodnoty budú vymazané z ich dočasného úložiska až po zatvorení zadaného formulára. V tomto prípade pri opätovnom umiestnení toho istého súboru do dočasného úložiska je potrebné predchádzajúcu hodnotu ručne vymazať. Napríklad:

nesprávne:

FileNameForProcessing = "C:/Súbory na spracovanie/Download.xml"; ... // Prvé volanie servera Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Vysledok = Vykonat InitialProcessingOnServer(Address);
... // Druhé volanie servera s rovnakou verziou súboru Result = Perform IntermediateProcessingOnServer(Address); ...
// Tretie volanie servera s Nová verzia adresa súboru = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Výsledok = Vykonať FinalProcessingOnServer(Address); ...

V dočasnom úložisku formulára tak zostanú dve kópie súborov. Adresa druhej kópie bude v premennej Adresa a adresa prvej kópie sa stratí. To vedie k spotrebe dodatočných zdrojov aplikácie a spomaleniu.

Správny:

FileNameForProcessing = "C:/Súbory na spracovanie/Download.xml"; ... // Prvé volanie servera Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Vysledok = Vykonat InitialProcessingOnServer(Address); ... // Druhé volanie servera s rovnakou verziou súboru Result = Perform IntermediateProcessingOnServer(Address); ...
// Tretie volanie servera s novou verziou súboru DeleteFromTemporaryStorage(Address); Adresa = ""; PlaceFile(Adresa, FileNameForProcessing, FileNameForProcessing, False, UniqueIdentifier); Výsledok = Vykonať FinalProcessingOnServer(Address); ...

pozri tiež

Nachádzajú nás: prístup k súborovému systému, GetTemporaryFileName(


Poviem vám prípad z mojej praxe. Jedného dňa som musel nastaviť nahrávanie dát do 1c účtovníctvo z nereplikovanej konfigurácie. Vykládka bola formou samostatného spracovania, pracujúceho podľa burzových pravidiel. Samotné pravidlá boli pripojené ako rozloženie binárnych údajov. Prevádzkový algoritmus je typický - pravidlá sa nahrajú do dočasného súboru a potom sa vytiahnu spracovaním " Univerzálna výmenaúdaje vo formáte XML."

Vývojár prestupových pravidiel a spracovania sa bil do hrude a prisahal, že mu všetko funguje perfektne. V praxi sa pri nahrávaní dát neustále vyskytla chyba. Text chybového hlásenia otvorene uvádzal, že problém spočíva v pravidlách burzy. „Dokument už túto vlastnosť nemá, odmietam ho nahrať,“ uvádza sa v texte správy. Nechcel som sa vŕtať v pravidlách výmeny, pretože... Nie je to moja práca. Namiesto toho som otvoril kód spracovania a rozhodol som sa zistiť, ako je organizovaný proces nahrávania pravidiel výmeny do dočasného súboru.

Ukázalo sa, že práve toto je ten problém. Faktom je, že programátor sa neobťažoval vytvoriť jedinečný názov súboru pre pravidlá výmeny (v dočasnom adresári) a dokonca vložil kontrolu: „Ak súbor existuje, nahrávanie nie je potrebné. Všetko samozrejme fungovalo až do spracovania, respektíve sa neaktualizoval layout s pravidlami. V dôsledku toho sa používatelia neustále pokúšali nahrávať pomocou zastaraných pravidiel výmeny. „Dočasný súbor“ v adresári „temp“ sa stal trvalým a kým ho ručne neodstránite, bude sa vždy používať na nahrávanie.

Musíte správne vytvoriť dočasné súbory

Aby ste sa vyhli takýmto vtipným situáciám, nemali by ste sa pokúšať znovu vynájsť kolesá a barle vo forme „zložitých“ funkcií, ktoré používajú objekty COM. Stačí použiť funkciu zabudovanú do platformy - GetTemporaryFileName(), ktorý automaticky rieši mnoho problémov:

Zabezpečuje, že názov súboru je skutočne jedinečný;

Ak vývojár zabudne vymazať súbor sám, určite sa vymaže pri ďalšom spustení platformy.

Automatické mazanie dočasných súborov počas reštartu platformy je veľmi zaujímavá funkcia, ktorá teoreticky umožňuje vývojárovi ignorovať potrebu odstraňovania súborov samotných. Pravda, stále sa to neoplatí zneužívať. Ak je kód spustený na serveri, musíte pochopiť, že server sa nemusí reštartovať po dlhú dobu, čo znamená, že dočasný priečinok sa upchá nepotrebné súbory. V tomto ohľade by ste platforme nemali úplne dôverovať „špinavej“ práci. Je lepšie použiť túto funkciu ako záložnú možnosť a pridať do kódu jeden riadok kódu navyše, aby ste vynútili odstránenie dočasného súboru.

Aký je teda zmysel môjho článku?

1. Je tam server (x64), s nainštalovaným Office 2016 (x64), je tam 1C 8.3.8 aj x64 (tzn. 1C server). Používatelia sa pripájajú cez tenkého aj webového klienta.

2. Existuje kopa štandardných zmlúv a faktúr vystavených (pripravených) obchodným oddelením. Existuje písmo, odsek atď., Samozrejme, všetko je navrhnuté vo Worde, Exceli 2016 (x64), samozrejme, nie je tu túžba kresliť to všetko v 1C, ale existuje túžba dať to do formátu ActiveDocument rozloženia

Riešenie sa zdá byť banálne :) , nebudem popisovať celý mechanizmus, ako sa to robí, ako sa plnia dáta z 1C do rozloženia ActiveDocument – ​​myslím, že to bezo mňa veľmi dobre poznáte. Počas práce sa však ukázalo, že v kráľovstve nie je všetko také hladké COM objekt ov, konkrétne:

2. Ktorú možnosť je lepšie zvoliť: ActiveDocument alebo Binary Data? Aj keď mi to znie ako výber Vodky s pivom alebo piva s vodkou :) . Žiaden veľký problém, dokumenty musíte vyplniť údajmi od 1C a preniesť ich klientovi.

Dobre, preskočme texty, volím ActiveDocument, nebudem popisovať celý algoritmus, len vymenujem úskalia a ich riešenie. Všetko, čo je uvedené nižšie, je moja osobná špekulácia a v žiadnom prípade si netvrdí, že je to konečná pravda. Možno ste tieto problémy vyriešili alebo ich vyriešili inak.

1. Kameň" najprv Metóda SaveAs nefunguje (pre MSWord aj MSExcel). Pri pokuse o zápis binárnych údajov 1C jednoducho zlyhá. Pozrite sa na fragment výpisu:

MSWord = Layout.Get(); Skúste dokument = MSWord.Application.Documents(1); Document.Activate(); //Ďalej nejako získame údaje a vyplníme dokument programu Word //Získajte cestu do dočasného adresára na uloženie súboru TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //kameň začína tu MyDocumentInBinaryData = New BinaryData(NameTime); //no, tu je tento kameň vyrazený 1C :) MSWord.Application.Quit();

Mnohokrat dakujem.

Vytváranie priečinkov
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problém bol vyriešený. Téma uzavretá.

Aky je dôvod? Dôvodom je kód

MSWord = Layout.Get();

Vždy volá inštanciu objektu COM (x32) bez ohľadu na to, aká bitová verzia Office je nainštalovaná. Premýšľali ste niekedy nad tým, prečo nemôžete vložiť súbory s príponou docx, xlsx do rozloženia ActoveDocument?

dá sa to skontrolovať aj cez Správcu úloh, ale faktom je, že rozloženie ActiveDocument implicitne volá inštanciu COM (x32), a preto sa všetky ďalšie manipulácie musia robiť s ohľadom na túto funkciu.

1. Server a všetok softvér musia byť x32. Potom nemusíte robiť nič (v zmysle prepisovania kódu)

2. Buď prepíšte kód týmto spôsobom

// získame názov dočasného súboru TimeFile = GetTemporaryFileName("doc"); // tento kód určite zavolá inštanciu COM požadovanej bitovej hĺbky, v našom prípade x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // potom je všetko ako predtým Rozloženie = Správa tlače Rozloženie tlačového formulára ("Document. Equipment Transfer Act." + Názov rozloženia); MSWord = Layout.Get(); Skúste dokument = MSWord.Application.Documents(1); Document.Activate(); // tu niečo urobíme, vyplníme údaje // tu znova uložíme náš súbor z COM x62 na COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentN = MSWord.Application.Documents.Open(TimeFile); DocumentH.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = Nedefinované; Výnimka // Ak sa vyskytne chyba, vytlačia sa údaje o chybe a objekt sa zatvorí. Informácie = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Chyba - "+Information.Description+" kód chyby - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndPokus;

Myslím, že tu je všetko jasné, najprv sme vytvorili inštanciu COM požadovanej bitovej hĺbky, vytvorili prázdny súbor a uložili ho do dočasného priečinka, potom pracujeme s COM x32, naplníme ho údajmi a nakoniec skopírujeme obsah celého dokument a uložte ho do predtým pripraveného súboru.

Všetko je rovnaké, ale iba pre Excel

TimeFile = GetTimeFileName("xls"); Excel = New COMObject("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); HárokN = KnihaN.Pracovné hárky(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); HárokN = KnihaN.Pracovné hárky(1); Skúste WBook = MSExcel.Application.Workbooks(1); Hárok = WBook.WorkSheets(1); Hárok.Aktivovať(); // niečo urobíme, naplníme to údajmi z 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Výnimka // Ak sa vyskytne chyba, vytlačia sa údaje o chybe a objekt sa zatvorí. Informácie = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Chyba - "+Information.Description+" kód chyby - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndPokus;

Nech sa páči " najprv„Rozhodol som sa ako kameň, na x64 serveri s Office x64 všetko funguje presne ako hodinky, bez chýb a nie je potrebné vytvárať žiadne priečinky a všetko ostatné.

kameň" druhý". útržok kódu."

TimeFile = GetTimeFileName("xls");

stravovanie nie je moc dobré, pretože to píše do priečinka: “c:\Users\ čo tam je...”, vo všeobecnosti je tento priečinok vždy na čiernej listine všetkých firewallov, antivírusov atď., atď. aspoň otvorte bezpečnostné riadiace centrum vo Worde alebo Exceli. Pozrime sa tam aj my

Budete sa s tým musieť pohrať, inak existuje možnosť, že sa objavia „podivné“ chyby. Preto navrhujem nasledovné:

1. Otvorte konfigurátor a pridajte nový register informácií

tu uložíme naše hotové Slovo, Excel súbory už vyplnené, samozrejme:

LayoutName – ID rozloženia

DocumentOffice - Value Storage, tu máme náš hotový súbor

2. Vyššie uvedený kód pridáme takto:

MH = Information Registers.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Selection.Link; MZ.LayoutName = Názov rozloženia; MZ.Read(); MH.Object = Selection.Link; MZ.LayoutName = Názov rozloženia; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); DeleteFiles(TimeFile);

Čo robíme je, že zapíšeme hotový súbor do registra informácií a potom odstránime samotný dočasný súbor, čím vyriešime problém „Word, Excel Security Center“. Zostáva len ukázať tento hotový súbor klientovi (tenkým a webovým klientom)

3. Kameň" tretí" - prenos súboru klientovi, tu len uverejním celý kód, časť prevzatá z BSP, časť z demo konfigurácie „Managed Application“, časť z internetu, ale vo všeobecnosti tu je kód (v jeho úplnosť)

///////////////////////////////////////////////// ////////////////////////// // SERVISNÉ POSTUPY A FUNKCIE BSP &OnServer Function GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Kľúč záznamu = Registre informácií. // Adresa = GetNavigationLink(RecordKey,"OfficeDocument"); Spiatočná adresa; EndFunction // &Procedúra OnClient AfterApplicationStart(ReturnCode, ApplicationName) Export; // Koniec procedúry &Na klientskej procedúre po prijatí súborov (prenesené súbory, ďalšie parametre) Exportovať, ak NIE sú prenesené súbory = nedefinované, potom pre každý popis prenášaných súborov cyklus OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Name ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; koniec Ak; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Export If SelectedFiles = Undefined Then Return; koniec Ak;<>Undefined Then DisableWaitHandler("Connectable_SendFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Adresár = DataStructure.Directory; LayoutName = DataStructure.LayoutName; Cesta k súboru = Directory+"\"+LayoutName+"_No"+DocumentNumber+.xls"; Popis = Nový popis prenášaného súboru (cesta k súboru, adresa); TransferredFiles = Nové pole; TransferredFiles.Add(Description); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); koniec Ak; EndProcedure &OnServer Procedure ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Nové pole; Array of Objects.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array,LayoutName,True); EndProcedure &OnClient Procedure Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Objekt", Odkaz); DataStructure.Insert("Názov rozloženia", "Faktúra"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); StartInstallingExtensions pre prácu so súbormi(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

Niekoľko upresnení:

1. Po prvé, náš klient pracuje v režime Thin aj Web, takže vopred nastavíme nasledujúce hodnoty vo vlastnostiach konfigurátora:

Aby ste sa vyhli problémom pri práci s prehliadačom

2. Používame obslužné programy čakania, aby sme sa vyhli problémom so synchronizáciou hovorov (platí len pre webový režim)

3. Nakoniec pripojte Rozšírenie pre prácu so súbormi (nezabudnite, že v režime Tenký klient, toto rozšírenie je vždy povolené). A cez kód:

prenesieme súbor klientovi pomocou mechanizmu Navigation Link, v prehliadači dostaneme nasledujúce správy (Thin funguje sám):

Zdá sa, že to je všetko. Snáď to niekomu pomôže...

Pokiaľ ide o Word, súbory Excel vložené ako binárne údaje? aký je problém?

1. Buď musíme tieto Binárne údaje vytiahnuť z layoutu a naplniť ich údajmi z 1C a POZOR si ich znova zapísať v tvare Binárne údaje (Vodka s pivom alebo pivo s vodkou)

2. Buď musíme získať rozloženie BinaryData na strane klienta a vyplniť ho tam, ALE objekt COM podporuje iba prehliadač IE a potom s tancami s nastaveniami ActiveX, ostatné prehliadače už dávno opustili používanie ActiveX

Technologická platforma 1C:Enterprise 8 vám umožňuje ušetriť informačnú základňuľubovoľné súbory, získajte ich odtiaľ a použite ich rôzne cesty. Pozrime sa na tieto operácie pomocou príkladov.

Pred nahraním súboru do informačnej základne 1C musíte získať úplnú adresu súboru na disku. Práca s dialógovými oknami výberu súboru je popísaná v .

Na ukladanie súborov použite atribút (alebo prostriedok registrácie) s typom StorageValues.

Nahranie ľubovoľného súboru do informačnej základne 1C

Akýkoľvek súbor môže byť reprezentovaný ako binárne dáta a načítaný do Ukladanie hodnoty.

Pri prevode binárnych údajov na objekt StorageValues použitý dizajn nové hodnoty úložiska (údaje, kompresia) s dvoma parametrami:

  1. Údaje— binárne údaje, ktoré je potrebné uložiť do pamäte
  2. Kompresia— kompresný pomer deflačného algoritmu. Celé číslo v rozsahu -1...9. -1 je predvolená úroveň kompresie. 0 - žiadna kompresia, 9 - maximálna kompresia. Predvolená hodnota: -1. Parameter je voliteľný, ak nie je zadaný, kompresia sa nepoužije.

//Konvertovať súbor na binárne dáta
Súbor = New BinaryData(Cesta) ;

//Vytvoriť nový objekt StorageValues

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

Uloženie ľubovoľného súboru z informačnej databázy 1C na disk

Ak chcete uložiť súbor z databázy 1C na disk, musíte určiť cestu a názov súboru. Na to slúži dialógové okno na ukladanie súboru, práca s ktorým je popísaná v.

//Získanie binárnych údajov z úložiska
//Data Storage - atribút objektu s typom Value Storage

//Zapíšte prijaté dáta na disk
//IN premenná cesta je úplná adresa súboru na disku
Údaje. Write(Cesta) ;

Prezeranie súboru umiestneného v informačnej základni 1C

Ak chcete zobraziť súbor uložený v databáze, musíte mať v počítači nainštalovanú aplikáciu, ktorá súbor otvorí.

//Získajte názov dočasného súboru s požadovanou príponou
//V premennej Prípona musíte zadať príponu súboru, napríklad "pdf"
Cesta = GetTemporaryFileName(Extension) ;

//Prijímanie údajov z úložiska
//Data Storage - atribút objektu s typom Value Storage
Dáta = Úložisko údajov. Get() ;

//Zápis údajov do dočasného súboru
Údaje. Write(Cesta) ;

//Pokúšam sa otvoriť súbor v zamýšľanej aplikácii
//Ak sa aplikácia nenájde, zobrazí sa systémové dialógové okno "Otvoriť pomocou...".
LaunchApplication(Path) ;

Používatelia sa veľmi často stretávajú s podivnými chybami: program funguje správne pre jedného používateľa, ale pre iného, ​​v blízkosti, na inom počítači, funguje úplne inak. Po zdĺhavom skúmaní sa často ukáže, že príčinou takýchto „závadov“ v 1C 8 je vyrovnávacia pamäť.

Nižšie vám poviem, čo je vyrovnávacia pamäť 1C a ako ju vyčistiť.

Ukladanie do vyrovnávacej pamäte— proces vytvárania zásobníka často používaných a spravidla statických informácií. Ukladanie do vyrovnávacej pamäte sa používa na zrýchlenie programu, najmä v 1C sa konfiguračné súbory načítajú do počítača používateľa, aby ich zakaždým nevyžadovali zo servera.

Platforma 1C však veľmi často nezvláda ukladanie konfigurácie do vyrovnávacej pamäte správne a výsledkom je nevhodné správanie pri konfigurácii.

Dôvody nesprávneho správania môžu byť rôzne: dynamické aktualizácie konfigurácie, zlyhania softvéru alebo hardvéru.

Prvým spôsobom je manuálne vymazanie vyrovnávacej pamäte 1C

Na vyriešenie problémov a „závadov“ 1C zvyčajne pomáha vymazanie vyrovnávacej pamäte platformy 1C 8.3.

Toto sa robí nasledovne:

krok 1

Nájdite adresár, kde sú uložené dočasné súbory 1C, možno ich vidieť v ponuke nastavení v zozname IB:

Krok 2

Dostali sme adresu ako

Získajte 267 video lekcií na 1C zadarmo:

C:\Documents and Settings\username\Application Data\1C\1Cv82\tmplts\1c

Priečinky vyrovnávacej pamäte sa nachádzajú na adrese

C:\Documents and Settings\username\Application Data\1C\1Cv82\

*kde používateľské meno je systémové používateľské meno a priečinok 1Cv82 sa môže líšiť v závislosti od verzie platformy 1C

Keď tam pôjdeme, nájdeme veľa (počet priečinkov sa rovná počtu konfigurácií) zaujímavých priečinkov:

Všetky vybrané adresáre sú vyrovnávacou pamäťou databázy 1C a možno ich bezpečne odstrániť. Pred vymazaním musíte ukončiť informačný bezpečnostný systém.

Ak sa vám nechce hľadať, kde sa súbory nachádzajú, môžete použiť špeciálny program(bat file), ktorý vymaže priečinky s dočasnými súbormi - stiahnuť . Pamätajte, že ich používate na vlastné riziko. Obsahujú nasledujúci príkaz:

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

Druhým spôsobom vymazania dočasných súborov 1C je odstránenie databázy zo zoznamu

Druhá metóda je jednoduchšia, ale nie je úplne správna. Ak ho chcete vyčistiť, stačí odstrániť túto konfiguráciu a vytvoriť novú s rovnakou cestou k informačnej bezpečnosti.

V dôsledku toho bude starý priečinok s vyrovnávacou pamäťou „odpojený“ od tohto systému zabezpečenia informácií a vytvorí sa nový adresár.

Môžete to urobiť, vyrovnávacia pamäť sa vymaže, ale dočasné súbory zostanú na pevnom disku.

Treťou metódou je parameter ClearCache

Príkaz je potrebné zadať v dodatočných parametroch spustenia (v zozname databáz tlačidlo Zmeniť, posledná záložka) /Vymazať vyrovnávaciu pamäť. Príklad použitia:

Video o vymazaní vyrovnávacej pamäte v programoch 1C:

Ak „závady“ v 1C po vymazaní vyrovnávacej pamäte nezmiznú a 1C nefunguje tak, ako by ste chceli, môžete sa obrátiť na.

Ak sa začínate učiť programovanie 1C, odporúčame naše voľný kurz(nezabudni prihlásiť sa na odber YouTube - pravidelne vychádzajú nové videá):