1s 8.3 lasīt saglabājiet failu serverī. Pareizi jāizveido pagaidu faili

Pielietojuma joma: pārvaldīta lietojumprogramma, mobilā lietotne, izplatīta lietojumprogramma.

1. Piekļūstot failiem un failu sistēmas direktorijiem no konfigurācijas koda, jāpatur prātā, ka piekļuvi tiem ierobežo lietotāja tiesības operētājsistēma, kuras vārdā darbojas lietojumprogramma.

1.1. Ja piekļuve failu sistēma tiek izpildīts no koda, kas darbojas klientā, tas tiek izpildīts saskaņā ar tā lietotāja tiesībām, kura vārdā darbojas lietojumprogramma (plānais, biezais vai tīmekļa klients). Parasti tas ir pašreizējais operētājsistēmas lietotājs.

1.2. Ja failu sistēmai piekļūst no koda, kas darbojas serverī, tad:

  • izmantojot klienta-servera informācijas bāzi, piekļuvi ierobežo tā lietotāja tiesības, kura vārdā darbojas serveris 1C:Enterprise (*);
  • Izmantojot tīmekļa serverī publicētu failu datu bāzi, piekļuvi ierobežo tā lietotāja tiesības, kura vārdā darbojas tīmekļa serveris.

Darbs ar pagaidu failiem un direktorijiem

Ja jums ir nepieciešams izmantot pagaidu failus un direktorijus, jums jāievēro šādas prasības:

1. Lai iegūtu pagaidu faila nosaukumu, izmantojiet metodi GetTemporaryFileName. Citādi tas ir iespējams nepareizs darbs konfigurācijas vairāku lietotāju režīmā, ar iespējotiem drošības profiliem, problēmas ar piekļuves tiesībām operētājsistēmas failiem.

Nepareizi:

IntermediateFileName = "C:/Pagaidu faili 1C/TempFile.xml"Data.Write(IntermediateFileName);

U pašreizējais lietotājs Iespējams, jums nav rakstīšanas atļaujas norādītajā direktorijā. Turklāt, palaižot šo kodu no divām dažādām sesijām vienlaikus, tiks parādīta kļūda.

Pa labi:

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

Izmantojot šo funkciju, tiks iegūts unikāls nosaukums un tiek garantēta piekļuve failam.

2. Lai izveidotu pagaidu direktoriju, ieteicams izmantot arī nosaukumu, kas iegūts, izmantojot metodi GetTemporaryFileName. Tas nodrošina, ka izveidotā direktorija nosaukums ir unikāls, strādājot vairāku lietotāju režīmā. Pēc tam izveidotajā direktorijā bez ierobežojumiem varat izveidot citus direktorijus un failus.

3. Izpildot kodu tīmekļa klientā vai retos gadījumos, ja nav nepieciešams darbs vairāku lietotāju režīmā (piemēram, datņu informācijas bāzes atjaunināšana, ekskluzīvs režīms), ir jāizmanto funkcija faila vai direktorija nosaukuma veidošanai. Pagaidu failu direktorijs.

Skatīt arīLinux OS konfigurāciju izstrādes iezīmes, par failu nosaukumu un ceļu lietošanas īpatnībām.

4. Pabeidzot darbu ar pagaidu failu vai direktoriju, tas ir jāizdzēš pašam. Jūs nevarat paļauties automātiska noņemšana failus un direktorijus, nākamreiz startējot platformu, tas var novest pie izsmelšanas brīva vieta pagaidu failu direktorijā.

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);//Darbs ar failu...//Pagaidu faila dzēšanaMēģinājums dzēst failus(IntermediateFileName);Izņēmumu žurnālsReģistrācija(НStr("ru = "Mans mehānisms. Darbība"") , LogLevel.Error, ErrorDetailView(ErrorInfo()));EndAttempt;

Skatīt arī:Žurnāla izmantošana.

5. Izmantojot pagaidu failus un direktorijus serverī, jums ir pilnībā jāpārtrauc darbs ar tiem viena servera izsaukuma laikā. Palaižot konfigurāciju, izmantojot servera klasteri, nākamreiz, kad izsauksiet šos failus, šie faili var kļūt nepieejami, jo kods tiks sākts izpildīt citā datorā. Ja jums ir jāsaglabā dati starp servera zvaniem vienas sesijas laikā, izmantojiet platformas pagaidu krātuvi (metodes , ).

5. 1. Retos gadījumos var būt nepieciešams pārsūtīt datus pagaidu failos starp sesijām, piemēram, sagatavojot datus fona darbs, organizējot ilgstošu procesu, kas apkalpo vairākus secīgus izsaukumus uz tīmekļa pakalpojumu. Nepieciešams patstāvīgi nodrošināt garantētu vienotu uzglabāšanas vietu, tiesības piekļūt failiem no dažādām to apstrādes vietām, failu dzēšanu pēc to apstrādes termiņa beigām vai apstrādes procesa nenormālu izbeigšanu. Ieteicama šāda pieeja:

  • Lai nodrošinātu piekļuvi no visām iespējamām apstrādes vietām, tiek izveidota konstante, lai saglabātu kopīgu ceļu uz failiem, kuriem var piekļūt no visiem klastera serveriem;
  • Veidojot pagaidu failus, to nosaukumi tiek ievadīti palīginformācijas reģistrā, saglabājot faila izveides laiku;
  • Parastā procesa gaitā pēdējā darbība, kurai bija nepieciešami faili, pirms tās pabeigšanas dzēš gan pašu failu, gan ierakstus par tiem palīgreģistrā;
  • Papildu rutīnas uzdevums periodiski pārbauda, ​​vai palīgreģistrā nav ierakstu, kuru kalpošanas laiks acīmredzami pārsniedz parasto procesa pabeigšanas laiku. Kad šādi ieraksti tiek atklāti, uzdevums dzēš pagaidu failus un ierakstus par tiem.

Failu pārsūtīšana starp klientu un serveri

1. Strādājot ar failu vienlaikus klientā un serverī, jāizmanto failu pārsūtīšana, izmantojot pagaidu krātuvi (metodes Vietas fails, VietaFaili, Iegūt failu, GetFiles, StartFilePlace, Novietot pagaidu glabātavā, Saņemt no pagaidu krātuves). Kopumā klientu un klasteru serveri ir dažādi datori ar dažādām failu sistēmām, un piekļuve failiem var notikt zem dažādi lietotāji OS ar dažādām tiesībām.

Nepareizi:

&OnClientProcedureFileProcessing() ...FileName = "C:/Faili apstrādei/Download.xml"; Rezultāts = Veikt ProcessingOnServer(FileName); ...EndProcedure&OnServerFunction PerformProcessingOnServer(FileName) Lasīšana = JaunaTekstaLasīšana(Faila nosaukums) ... Rezultāts = Reading.Read(); Atgriešanas rezultāts; EndFunction

Pa labi:

&OnClientProcedureFileProcessing() ...FileNameForProcessing = "C:/Faili apstrādei/Download.xml"; Adrese = ""; Vietas fails (adrese, faila nosaukums apstrādei, faila nosaukums apstrādei, viltus); Rezultāts = Veikt ProcessingOnServer(Adrese); ...EndProcedure&OnServerFunction Veikt ProcessingOnServer(Address) Data = GetFromTemporaryStorage(Address) IntermediateFileName = GetTemporaryFileName("txt"); Data.Write(IntermediateFileName); Lasīt = Jauns lasāmais teksts(IntermediateFileName) ... Rezultāts = Lasīt.Lasīt(); ...DeleteFiles(IntermediateFileName); Atgriešanas rezultāts; EndFunction

2. Lai saglabātu datus pagaidu krātuvē starp vairākiem servera izsaukumiem, ievietojot tos krātuvē, jāizmanto parametrs UniqueFormIdentifier metodi Vietas fails nododot tajā pašreizējās formas identifikatoru. Šādas vērtības tiks dzēstas no pagaidu krātuves tikai tad, kad tiks aizvērta norādītā forma. Šajā gadījumā, atkārtoti ievietojot to pašu failu pagaidu krātuvē, iepriekšējā vērtība ir jādzēš manuāli. Piemēram:

Nepareizi:

FileNameForProcessing = "C:/Faili apstrādei/Download.xml"; ... // Pirmais servera izsaukums Adrese = ""; Vietas fails (adrese, faila nosaukums apstrādei, faila nosaukums apstrādei, nepatiess, unikālais identifikators); Rezultāts = Veikt InitialProcessingOnServer(Adrese);
... // Otrais servera izsaukums ar tādu pašu faila versiju Rezultāts = Veikt IntermediateProcessingOnServer(Address); ...
// Trešais servera zvans ar jauna versija faila adrese = ""; Vietas fails (adrese, faila nosaukums apstrādei, faila nosaukums apstrādei, nepatiess, unikālais identifikators); Rezultāts = Veikt FinalProcessingOnServer(Adrese); ...

Tādējādi veidlapas pagaidu krātuvē tiks atstātas divas failu kopijas. Otrās kopijas adrese būs mainīgajā Adrese, un pirmās kopijas adrese tiks zaudēta. Tas izraisa papildu lietojumprogrammu resursu patēriņu un palēnināšanos.

Pa labi:

FileNameForProcessing = "C:/Faili apstrādei/Download.xml"; ... // Pirmais servera izsaukums Adrese = ""; Vietas fails (adrese, faila nosaukums apstrādei, faila nosaukums apstrādei, nepatiess, unikālais identifikators); Rezultāts = Veikt InitialProcessingOnServer(Adrese); ... // Otrais servera izsaukums ar tādu pašu faila versiju Rezultāts = Veikt IntermediateProcessingOnServer(Address); ...
// Trešais servera izsaukums ar jaunu faila versiju DeleteFromTemporaryStorage(Address); Adrese = ""; Vietas fails (adrese, faila nosaukums apstrādei, faila nosaukums apstrādei, nepatiess, unikālais identifikators); Rezultāts = Veikt FinalProcessingOnServer(Adrese); ...

Skatīt arī

Viņi mūs atrod: piekļuve failu sistēmai, GetTemporaryFileName(


Es jums pastāstīšu gadījumu no savas prakses. Kādu dienu man bija jāiestata datu augšupielāde uz 1c grāmatvedība no nereplicētas konfigurācijas. Izkraušana notika atsevišķas apstrādes veidā, strādājot pēc maiņas noteikumiem. Paši noteikumi tika pievienoti kā bināro datu izkārtojums. Darbības algoritms ir tipisks - noteikumi tiek augšupielādēti pagaidu failā un pēc tam tiek izvilkti, apstrādājot " Universāla maiņa dati XML formātā."

Pārsūtīšanas noteikumu un apstrādes izstrādātājs sita pa krūtīm un zvērēja, ka viņam viss strādā perfekti. Praksē datu augšupielādes laikā pastāvīgi radās kļūda. Kļūdas ziņojuma tekstā atklāti tika teikts, ka problēma slēpjas apmaiņas noteikumos. “Dokumentam vairs nav šī īpašuma, es atsakos to augšupielādēt,” lasāms ziņojuma tekstā. Negribēju ķerties pie maiņas noteikumiem, jo... Tas nav mans darbs. Tā vietā es atvēru apstrādes kodu un nolēmu redzēt, kā tiek organizēts apmaiņas noteikumu augšupielādes process pagaidu failā.

Izrādījās, ka problēma ir tieši tā. Fakts ir tāds, ka programmētājs neuztraucās izveidot unikālu faila nosaukumu apmaiņas noteikumiem (pagaidu direktorijā) un pat ievietoja atzīmi: "Ja fails pastāv, augšupielāde nav nepieciešama." Protams, viss darbojās līdz apstrādei, pareizāk sakot, izkārtojums ar noteikumiem netika atjaunināts. Rezultātā lietotāji pastāvīgi mēģināja augšupielādēt, izmantojot novecojušus apmaiņas noteikumus. “Pagaidu fails” direktorijā “temp” ir kļuvis pastāvīgs, un, kamēr neizdzēsīsit to manuāli, tas vienmēr tiks izmantots augšupielādei.

Pareizi jāizveido pagaidu faili

Lai izvairītos no šādām smieklīgām situācijām, jums nevajadzētu mēģināt no jauna izgudrot riteņus un kruķus "kutelpu" funkciju veidā, kas izmanto COM objektus. Pietiek izmantot platformā iebūvēto funkciju - GetTemporaryFileName(), kas automātiski atrisina daudzas problēmas:

Nodrošina, lai faila nosaukums būtu patiesi unikāls;

Ja izstrādātājs aizmirsīs dzēst failu pats, tas noteikti tiks dzēsts nākamajā platformas palaišanas reizē.

Automātiska pagaidu failu dzēšana platformas restartēšanas laikā ir ļoti interesanta funkcija, kas teorētiski ļauj izstrādātājam ignorēt nepieciešamību pašiem dzēst failus. Tiesa, joprojām nav vērts to ļaunprātīgi izmantot. Ja kods tiek izpildīts serverī, tad jums ir jāsaprot, ka serveris var netikt restartēts ilgu laiku, kas nozīmē, ka temp mape tiks aizsērējusi nevajadzīgos failus. Šajā sakarā nevajadzētu pilnībā uzticēt “netīro” darbu platformai. Labāk ir izmantot šo funkciju kā rezerves opciju un kodam pievienot vienu papildu koda rindiņu, lai piespiestu noņemt pagaidu failu.

Tātad, kāda ir mana raksta jēga?

1. Ir serveris (x64), ar instalētu Office 2016 (x64), ir 1C 8.3.8 arī x64 (tas nozīmē 1C serveris). Lietotāji savienojas, izmantojot gan plāno klientu, gan tīmekļa klientu.

2. Ir virkne tipveida līgumu un rēķinu, ko izrakstījusi (sagatavojusi) pārdošanas nodaļa. Ir fonts, rindkopa utt, protams, viss ir veidots Word, Excel 2016 (x64), dabiski, ka nav vēlēšanās to visu zīmēt 1C, bet ir vēlme to ievietot ActiveDocument formātā izkārtojumi

Risinājums šķiet banāls :) , Es neaprakstīšu visu mehānismu, kā tas tiek darīts, kā dati tiek ievadīti no 1C ActiveDocument izkārtojumā - es domāju, ka jūs to lieliski zināt bez manis. Taču darba gaitā kļuva skaidrs, ka valstībā ne viss ir tik gludi COM objekts ov, proti:

2. Kuru iespēju labāk izvēlēties: ActiveDocument vai Binary Data? Lai gan man tas izklausās līdzīgi kā izvēlēties degvīnu ar alu vai alu ar degvīnu :) . Nav nekas, jums ir jāaizpilda dokumenti ar datiem no 1C un jāpārsūta Klientam.

Nu, labi, izlaidīsim dziesmu tekstus, es izvēlos ActiveDocument, es neaprakstīšu visu algoritmu, es tikai uzskaitīšu nepilnības un to risinājumus. Viss, kas norādīts tālāk, ir manas personīgās spekulācijas un nekādā gadījumā nepretendē uz galīgo patiesību. Iespējams, esat atrisinājis šīs problēmas vai atrisinājušas tās citādi.

1. Akmens vispirms". SaveAs metode nedarbojas (gan MSWord, gan MSExcel). Mēģinot rakstīt bināros datus, 1C vienkārši avarē. Apskatiet saraksta fragmentu:

MSWord = Layout.Get(); Izmēģiniet Document = MSWord.Application.Documents(1); Document.Activate(); //Tālāk kaut kā iegūstam datus un aizpildām Word dokumentu //Iegūstam ceļu pagaidu direktorijā, lai tur saglabātu failu TimeName = GetTemporaryFileName(.docx"); Document.SaveAs(VārdsLaiks); //akmens sākas šeit MyDocumentInBinaryData = New BinaryData(NameLaiks); //nu, lūk, šo akmeni izsita 1C :) MSWord.Application.Quit();

Liels paldies.

Mapju izveide
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
problēma tika atrisināta. Tēma slēgta.

Kāds ir iemesls? Iemesls ir tāds, ka kods

MSWord = Layout.Get();

Vienmēr izsauc COM objekta gadījumu (x32) neatkarīgi no Office instalētā bituma. Vai esat kādreiz domājis, kāpēc ActoveDocument izkārtojumā nevar ievietot failus ar paplašinājumu docx, xlsx?

to var arī pārbaudīt, izmantojot uzdevumu pārvaldnieku, bet fakts ir tāds, ka ActiveDocument izkārtojums netieši izsauc COM instanci (x32), un tāpēc visas turpmākās manipulācijas ir jāveic, ņemot vērā šo funkciju.

1. Serverim un visai programmatūrai jābūt x32. Tad jums nekas nav jādara (koda pārrakstīšanas nozīmē)

2. Vai nu pārrakstiet kodu šādā veidā

// iegūt pagaidu faila nosaukumu TimeFile = GetTemporaryFileName("doc"); // šis kods noteikti izsauks vajadzīgā bitu dziļuma COM gadījumu, mūsu gadījumā x64 Word = New COMObject("Word.Application"); Word.Displaybrīdinājumi = 0; DokumentsN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // tad viss ir kā iepriekš Layout = Drukas pārvaldība. Drukas veidlapas izkārtojums ("Dokumentu. Iekārtu nodošanas akts." + Izkārtojuma nosaukums); MSWord = Layout.Get(); Izmēģiniet Document = MSWord.Application.Documents(1); Document.Activate(); // šeit mēs kaut ko darām, aizpildām datus // šeit mēs atkārtoti saglabāsim savu failu no COM x62 uz COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentN = MSWord.Application.Documents.Open(TimeFile); DokumentsH.Aktivizēt(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DokumentsN.Aizvērt(); MSWord = Nedefinēts; Izņēmums // Ja rodas kļūda, tiek izdrukāti kļūdas dati un objekts tiek aizvērts. Informācija = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Kļūda - "+Informācija.Apraksts+" kļūdas kods - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); EndAttempt;

Es domāju, ka šeit viss ir skaidrs, vispirms mēs izveidojām vajadzīgā bitu dziļuma COM gadījumu, izveidojām tukšu failu un saglabājām to pagaidu mapē, tad strādājam ar COM x32, piepildām to ar datiem un visbeidzot kopējam visa satura saturu. dokumentu un saglabājiet to iepriekš sagatavotā failā.

Viss ir vienāds, bet tikai Excel

TimeFile = GetTimeFileName("xls"); Excel = jauns COMObject("Excel.Application"); Excel.Displaybrīdinājumi = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.Work Sheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Dokuments.Iekārtas rēķins."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.Work Sheets(1); Izmēģinot WBook = MSExcel.Application.Workbooks(1); Lapa = WBook.WorkSheets(1); Sheet.Activate(); // mēs kaut ko darām, piepildām to ar datiem no 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); GrāmataN.Saglabāt(); GrāmataN.Aizvērt(); Izņēmums // Ja rodas kļūda, tiek izdrukāti kļūdas dati un objekts tiek aizvērts. Informācija = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Kļūda - "+Informācija.Apraksts+" kļūdas kods - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

še tev" vispirms“Es nolēmu, ka uz x64 servera ar Office x64 viss darbojas kā pulkstenis, bez kļūdām un nav jāveido mapes un viss pārējais.

Akmens" otrais". koda fragments

TimeFile = GetTimeFileName("xls");

ēst nav īpaši labi, jo uz mapi raksta: “c:\Users\ kas tur...”, vispār šī mape vienmēr ir visu ugunsmūru melnajā sarakstā, antivīrusi utt utt, plkst. vismaz atveriet drošības vadības centru programmā Word vai Excel. Paskatīsimies arī tur

Jums ar to būs jāmācās, pretējā gadījumā var parādīties “dīvainas” kļūdas. Tāpēc es iesaku sekojošo:

1. Atveriet konfiguratoru un pievienojiet jaunu informācijas reģistru

šeit mēs glabāsim savu gatavo Vārdu, Excel faili jau aizpildīts, protams:

LayoutName — izkārtojuma ID

DocumentOffice — vērtību krātuve, šeit mēs glabājam gatavo failu

2. Mēs pievienojam iepriekš minēto kodu šādi:

MH = Informācijas reģistri.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.Lasīt(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Rakstīt(); Dzēst failus (TimeFile);

Mēs ierakstām gatavo failu informācijas reģistrā un pēc tam izdzēšam pašu pagaidu failu, atrisinot “Word, Excel drošības centra” problēmu. Atliek tikai parādīt šo gatavo failu klientam (plānajiem un tīmekļa klientiem)

3. Akmens " trešais" - faila pārsūtīšana uz klientu, šeit es vienkārši ievietošu visu kodu, daži no BSP, daži no “Managed Application” demonstrācijas konfigurācijas, daži no interneta, bet kopumā šeit ir kods (savā kopumā)

////////////////////////////////////////////////// ////////////////////////// // PAKALPOJUMA PROCEDŪRAS UN FUNKCIJAS BSP &OnServer funkcija GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Ieraksta atslēga = Informācijas reģistri. TemporaryOfficeStorage. CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // Adrese = GetNavigationLink(RecordKey,"OfficeDocument"); Atgriešanās adrese; EndFunction // &OnClient procedūra AfterApplicationStart(ReturnCode, ApplicationName) Export; // Procedūras beigas &Klienta procedūrā pēc failu saņemšanas (pārsūtītie faili, papildu parametri) Eksportēt, ja NAV pārsūtīti faili = nav definēti, tad katram pārsūtīto failu aprakstam cikls OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisNameObject, Description. ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; endIf; EndProcedure &OnClient procedūra AfterDirectorySelection(SelectedFiles, CommandName) Eksportēt, ja SelectedFiles = Nedefinēts, tad atgriezt; endIf; Directory = SelectedFiles; General PurposeServerCall.SaveWorkingDirectory(Directory); Ja CommandName = "Rēķins" Tad LayoutName = "Rēķins" EndIf; DataStructure.Insert("Directory", Directory); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Procedūras beigas &Klienta procedūrā atveriet failus, izmantojot paplašinājumu (komandas nosaukums) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Directory = GeneralPurposeCallServer.GetWorkingDirectory(); Ja direktorijs = nenoteikts VAI direktorijs = "" Tad dialoglodziņš = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Failu pagaidu glabāšanas direktorija izvēle"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Else SelectedFiles = jauns masīvs; SelectedFiles.Add(Directory); Veikt brīdinājumu apstrādi (OpAfterSelectingDirectory, SelectedFiles); endIf; Procedūras beigas &Par klienta procedūru ProcessConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(Papildu parametri.CommandName); endIf; EndProcedure &OnClient procedūra Connected_PassFileToClient() Address = GetLayout(); Ja Adrese<>Undefined Tad DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Directory = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Directory+"\"+LayoutName+"_No"+DocumentNumber+.xls"; Apraksts = jauns pārsūtītā faila apraksts (ceļš uz failu, adrese); TransferredFiles = jauns masīvs; Pārsūtītie faili.Pievienot(Apraksts); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); endIf; Procedūras beigas &Servera procedūrā ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("Dokumenta numurs", ObjectReference.Number); ObjectArray = jauns masīvs; Objektu masīvs.Pievienot(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array,LayoutName,True); EndProcedure &OnClient procedūra Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient procedūra Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Objekts", Saite); DataStructure.Insert("Izkārtojuma nosaukums", "Rēķins"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Sāciet instalēt FileWorking paplašinājumu (); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("Komandasnosaukums",KomandasApraksts.Identifier))); EndProcedure // End StandardSubsystems.Print

Daži precizējumi:

1. Pirmkārt, mūsu klients strādā gan plānā, gan tīmekļa režīmā, tāpēc iepriekš konfiguratora rekvizītos iestatām šādas vērtības:

Lai izvairītos no problēmām, strādājot ar pārlūkprogrammu

2. Mēs izmantojam gaidīšanas apdarinātājus, lai izvairītos no problēmām ar zvanu sinhronizāciju (tas attiecas tikai uz tīmekļa režīmu).

3. Visbeidzot, pievienojiet paplašinājumu darbam ar failiem (atcerieties, ka režīmā Plāns klients, šis paplašinājums vienmēr ir iespējots). Un caur kodu:

mēs pārsūtām failu Klientam, izmantojot Navigācijas saites mehānismu, pārlūkprogrammā saņemam šādus ziņojumus (Thin darbojas pats):

Nu, šķiet, tas arī viss. Cerams, ka kādam noderēs...

Kas attiecas uz Word, Excel faili ir ievietoti kā binārie dati? kāda ir problēma?

1. Mums ir vai nu jāizvelk šie binārie dati no izkārtojuma un jāaizpilda tie ar datiem no 1C, un UZMANĪBU vēlreiz pierakstiet tos bināro datu formā (degvīns ar alu vai alus ar degvīnu)

2. Vai nu jādabū BinaryData izkārtojums uz Klienta pusi un jāaizpilda tur, BET COM objektu atbalsta tikai IE pārlūks un tad ar dejām ar ActiveX iestatījumiem citas pārlūkprogrammas jau sen ir atteikušās no ActiveX lietošanas

1C:Enterprise 8 tehnoloģiju platforma ļauj ietaupīt informācijas bāze patvaļīgiem failiem, iegūstiet tos no turienes un izmantojiet tos Dažādi ceļi. Apskatīsim šīs darbības, izmantojot piemērus.

Pirms faila augšupielādes 1C informācijas bāzē, jums ir jāiegūst pilna faila adrese diskā. Darbs ar failu atlases dialoglodziņiem ir aprakstīts .

Lai saglabātu failus, izmantojiet atribūtu (vai reģistra resursu) ar tipu StorageValues.

Patvaļīga faila augšupielāde 1C informācijas bāzē

Jebkuru failu var attēlot kā binārus datus un ielādēt tajā Vērtību krātuve.

Pārvēršot bināros datus objektā StorageValues izmantots dizains jaunas krātuves vērtības (dati, saspiešana) ar diviem parametriem:

  1. Dati— binārie dati, kas jāuzglabā krātuvē
  2. Saspiešana— Deflācijas algoritma kompresijas pakāpe. Vesels skaitlis diapazonā -1...9. -1 ir noklusējuma saspiešanas līmenis. 0 - nav saspiešanas, 9 - maksimālā saspiešana. Noklusējuma vērtība: -1. Parametrs nav obligāts; ja tas nav norādīts, saspiešana netiek izmantota.

//Konvertējiet failu bināros datos
Fails = New BinaryData(Path) ;

//Izveidojiet jaunu vērtību krātuves objektu

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

Patvaļīga faila saglabāšana no 1C informācijas bāzes diskā

Lai saglabātu failu no 1C datu bāzes diskā, jums ir jānosaka ceļš un faila nosaukums. Lai to izdarītu, ir failu saglabāšanas dialoglodziņš, ar kuru darbs ir aprakstīts.

//Saņemiet bināros datus no krātuves
//Datu krātuve - objekta atribūts ar vērtību krātuves tipu

//Saņemtos datus ierakstiet diskā
//IN mainīgais ceļš ir diskā esošā faila pilna adrese
Dati. Rakstīt(Ceļš) ;

Skatiet failu, kas atrodas 1C informācijas bāzē

Lai skatītu datu bāzē saglabāto failu, datorā jābūt instalētai lietojumprogrammai, kas atver failu.

//Iegūstiet pagaidu faila nosaukumu ar nepieciešamo paplašinājumu
//Paplašinājuma mainīgajā jāievieto faila paplašinājums, piemēram, "pdf"
Ceļš = GetTemporaryFileName(Extension) ;

//Saņemt datus no krātuves
//Datu krātuve - objekta atribūts ar vērtību krātuves tipu
Dati = datu krātuve. Gūt() ;

//Ierakstiet datus pagaidu failā
Dati. Rakstīt(Ceļš) ;

//Mēģina atvērt failu paredzētajā lietojumprogrammā
//Ja lietojumprogramma netiek atrasta, parādīsies sistēmas dialoglodziņš "Atvērt ar...".
LaunchApplication(Path) ;

Ļoti bieži lietotāji saskaras ar dīvainām kļūdām: vienam lietotājam programma darbojas pareizi, bet citam, tuvumā, citā datorā, tā darbojas pavisam savādāk. Bieži vien pēc ilgstošas ​​​​izmeklēšanas izrādās, ka šādu “traucējumu” 1C 8 cēlonis ir kešatmiņa.

Tālāk es jums pastāstīšu, kas ir 1C kešatmiņa un kā to notīrīt.

Kešatmiņa— bieži izmantotas un, kā likums, statiskas informācijas bufera izveides process. Kešatmiņa tiek izmantota, lai paātrinātu programmu; jo īpaši 1C versijā konfigurācijas faili tiek ielādēti lietotāja datorā, lai katru reizi tos nepieprasītu no servera.

Tomēr ļoti bieži platforma 1C nepareizi apstrādā konfigurācijas kešatmiņu, un rezultātā mēs iegūstam neatbilstošu konfigurācijas uzvedību.

Nepareizas darbības iemesli var būt dažādi: dinamiski konfigurācijas atjauninājumi, programmatūras vai aparatūras kļūmes.

Pirmā metode ir manuāli notīrīt 1C kešatmiņu

Lai atrisinātu 1C problēmas un “kļūmes”, parasti palīdz 1C 8.3 platformas kešatmiņas notīrīšana.

Tas tiek darīts šādi:

1. darbība

Atrodiet direktoriju, kurā tiek glabāti pagaidu 1C faili, tos var redzēt iestatījumu izvēlnē IB sarakstā:

2. darbība

Mums ir tāda adrese kā

Saņemiet 267 video nodarbības 1C bez maksas:

C:\Dokumenti un iestatījumi\lietotājvārds\Lietojumprogrammas dati\1C\1Cv82\tmplts\1c

Kešatmiņas mapes atrodas

C:\Dokumenti un iestatījumi\lietotājvārds\Lietojumprogrammas dati\1C\1Cv82\

*kur lietotājvārds ir sistēmas lietotājvārds, un mape 1Cv82 var atšķirties atkarībā no 1C platformas versijas

Dodoties tur, mēs atrodam daudzas interesantas mapes (mapju skaits ir vienāds ar konfigurāciju skaitu):

Visi atlasītie direktoriji ir 1C datu bāzes kešatmiņa, un tos var droši izdzēst. Pirms dzēšanas ir jāiziet no informācijas drošības sistēmas.

Ja nevēlaties meklēt, kur faili atrodas, varat izmantot īpaša programma(bat fails), kas attīra mapes ar pagaidu failiem - lejupielāde . Lūdzu, atcerieties, ka jūs tos lietojat uz savu risku. Tie satur šādu komandu:

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

Otrs veids, kā notīrīt 1C pagaidu failus, ir datu bāzes noņemšana no saraksta

Otrā metode ir vienkāršāka, taču tā nav pilnīgi pareiza. Lai to notīrītu, vienkārši izdzēsiet šo konfigurāciju un izveidojiet jaunu ar tādu pašu ceļu uz informācijas drošību.

Rezultātā vecā mape ar kešatmiņu tiks “atsaistīta” no šīs informācijas drošības sistēmas, un tiks izveidots jauns direktorijs.

To var izdarīt, kešatmiņa tiek notīrīta, bet pagaidu faili paliek cietajā diskā.

Trešā metode ir ClearCache parametrs

Papildu palaišanas parametros ir jāievada komanda (datu bāzu sarakstā poga Mainīt, pēdējā cilne) /Iztīrīt kešatmiņu. Lietošanas piemērs:

Video par kešatmiņas notīrīšanu 1C programmās:

Ja 1C “kļūmes” nepazūd pēc kešatmiņas notīrīšanas un 1C nedarbojas tā, kā vēlaties, varat vērsties pie.

Ja jūs sākat apgūt 1C programmēšanu, mēs iesakām mūsu bezmaksas kurss(neaizmirsti abonēt YouTube - regulāri tiek izdoti jauni videoklipi):