1s 8.3 унших файлыг сервер дээр хадгална. Та түр зуурын файлуудыг зөв үүсгэх хэрэгтэй

Хэрэглээний хамрах хүрээ: удирддаг програм, гар утасны програм, нийтлэг хэрэглээ.

1. Файлын системийн файл, лавлах руу тохиргооны кодоор хандахдаа тэдгээрт хандах хандалт нь хэрэглэгчийн эрхээр хязгаарлагддаг гэдгийг анхаарах хэрэгтэй. үйлдлийн систем, түүний нэрийн өмнөөс програм ажиллаж байна.

1.1. Хэрэв хандах бол Файлын системҮйлчлүүлэгч дээр ажиллаж байгаа кодоос хэрэгждэг бөгөөд энэ нь түүний өмнөөс програм ажиллаж байгаа хэрэглэгчийн эрхээр (нимгэн, зузаан эсвэл вэб клиент) гүйцэтгэгддэг. Ерөнхийдөө энэ нь үйлдлийн системийн одоогийн хэрэглэгч юм.

1.2. Хэрэв сервер дээр ажиллаж байгаа кодоос файлын системд хандсан бол:

  • үйлчлүүлэгч-серверийн мэдээллийн баазыг ашиглах үед хандалт нь 1C: Enterprise серверийг төлөөлөн ажиллаж байгаа хэрэглэгчийн эрхээр хязгаарлагддаг (*);
  • Вэб сервер дээр нийтлэгдсэн файлын мэдээллийн санг ашиглах үед хандалт нь вэб серверийг төлөөлөн ажиллаж байгаа хэрэглэгчийн эрхээр хязгаарлагддаг.

Түр зуурын файл, лавлахтай ажиллах

Хэрэв та түр зуурын файл, лавлах ашиглах шаардлагатай бол дараах шаардлагыг хангасан байх ёстой.

1. Түр зуурын файлын нэрийг авахын тулд аргыг ашиглана уу GetTemporaryFileName. Үгүй бол боломжтой буруу ажилолон хэрэглэгчийн горим дахь тохиргоо, аюулгүй байдлын профайлыг идэвхжүүлсэн, үйлдлийн системийн файлуудад хандах эрхийн асуудал.

Буруу:

IntermediateFileName = "C:/Temporary files 1C/TempFile.xml"Data.Write(IntermediateFileName);

У одоогийн хэрэглэгчТанд заасан лавлах руу бичих зөвшөөрөл байхгүй байж магадгүй. Нэмж хэлэхэд, энэ кодыг хоёр өөр сессээс нэгэн зэрэг ажиллуулах нь алдаа гаргах болно.

Баруун:

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

Энэ функцийг ашиглах үед өвөрмөц нэр гарч ирэх бөгөөд файлд хандах нь баталгаатай болно.

2. Түр зуурын лавлах үүсгэхийн тулд мөн аргыг ашиглан олж авсан нэрийг ашиглахыг зөвлөж байна GetTemporaryFileName. Энэ нь олон хэрэглэгчийн горимд ажиллах үед үүсгэсэн лавлахын нэр өвөрмөц байхыг баталгаажуулдаг. Үүний дараа та үүсгэсэн директор дотор бусад лавлах болон файлуудыг хязгаарлалтгүйгээр үүсгэж болно.

3. Вэб клиент дээр код ажиллуулахдаа эсвэл ховор тохиолдолд олон хэрэглэгчийн горимд ажиллах шаардлагагүй (жишээлбэл, файлын мэдээллийн баазыг шинэчлэх, онцгой горим) та функцийг ашиглан файл эсвэл директорийн нэрийг үүсгэх ёстой. Түр зуурын файлуудын лавлах.

бас үзнэ үүЛинукс үйлдлийн системд зориулсан тохиргоог боловсруулах онцлог, файлын нэр, замыг ашиглах онцлогийн талаар.

4. Түр файл эсвэл лавлахтай ажиллаж дууссаны дараа та өөрөө устгах ёстой. Та найдаж болохгүй автоматаар устгахДараагийн удаа платформыг эхлүүлэхэд файлууд болон лавлахууд нь ядрахад хүргэж болзошгүй чөлөөт зайтүр зуурын файлын директор дотор.

IntermediateFileName = GetTemporaryFileName("xml");Data.Write(IntermediateFileName);//Файлтай ажиллаж байна...//Түр файлыг устгаж байна Файлуудыг устгахыг оролдож байна(IntermediateFileName);Exception LogRegistration(НStr("ru = "Миний механизм. Үйлдэл"") , LogLevel.Error, ErrorDetailView(ErrorInfo()));EndAttempt;

Мөн үзнэ үү:Бүртгэлийн дэвтэр ашиглах.

5. Сервер дээр түр зуурын файлууд болон лавлахуудыг ашиглахдаа нэг сервер дуудлагын хүрээнд тэдэнтэй ажиллахаа бүрэн зогсоох ёстой. Серверийн кластер ашиглан тохиргоог ажиллуулах үед дараагийн удаад эдгээр файл руу залгахад код нь өөр компьютер дээр ажиллаж эхлэх тул тэдгээр файлд хандах боломжгүй болж магадгүй юм. Хэрэв та нэг сесс дотор сервер дуудлагын хооронд өгөгдөл хадгалах шаардлагатай бол платформын түр хадгалах санг ашиглах хэрэгтэй (арга , ).

5. 1. Ховор тохиолдолд сесс хооронд, тухайлбал, өгөгдөл бэлтгэх үед түр файл дахь өгөгдлийг дамжуулах шаардлагатай байж болно. суурь ажил, вэб үйлчилгээ рүү хэд хэдэн дараалсан дуудлага хийх урт хугацааны үйл явцыг зохион байгуулах үед. Баталгаат нийтлэг хадгалалтын байршил, тэдгээрийг боловсруулах өөр өөр газраас файлд хандах эрх, боловсруулалтын хугацаа дууссаны дараа файлуудыг устгах эсвэл боловсруулах үйл явц хэвийн бусаар дуусгавар болох зэргийг бие даан хангах шаардлагатай. Дараах аргыг санал болгож байна.

  • Боловсруулах бүх боломжит байршлаас хандалтыг хангахын тулд кластерын бүх серверээс хандах боломжтой файлуудын нийтлэг замыг хадгалах тогтмолыг үүсгэсэн;
  • Түр зуурын файл үүсгэх үед тэдгээрийн нэрийг туслах мэдээллийн бүртгэлд оруулж, файл үүсгэсэн цагийг хадгална;
  • Процессын хэвийн явцад файлд шаардлагатай сүүлчийн үйлдэл нь дуусахаас өмнө файлыг өөрөө болон туслах бүртгэл дэх тэдгээрийн талаархи оруулгуудыг хоёуланг нь устгадаг;
  • Туслах ердийн даалгавар нь туслах бүртгэлд бичилт байгаа эсэхийг үе үе шалгадаг бөгөөд ашиглалтын хугацаа нь процессын хэвийн дуусах хугацаанаас илт давсан байдаг. Ийм оруулгууд илэрсэн үед даалгавар нь түр зуурын файлууд болон тэдгээрийн талаарх оруулгуудыг устгадаг.

Үйлчлүүлэгч болон сервер хооронд файл дамжуулах

1. Үйлчлүүлэгч болон сервер дээр нэгэн зэрэг файлтай ажиллахдаа түр хадгалах (арга) дамжуулан файл дамжуулахыг ашиглах ёстой. PlaceFile, Файлуудыг байрлуулах, Файл авах, GetFiles, StartFilePlace, Түр хадгалах газарт байрлуулна, Түр хадгалах газраас хүлээн авах). Ерөнхийдөө клиент болон кластер серверүүд янз бүрийн компьютеруудөөр өөр файлын системтэй бөгөөд файлд хандах хандалт дор тохиолдож болно өөр өөр хэрэглэгчидӨөр өөр эрхтэй үйлдлийн систем.

Буруу:

&OnClientProcedureFileProcessing() ...FileName = "C:/Файл боловсруулахад/Татаж авах.xml"; Үр дүн = ProcessingOnServer(ФайлынНэр)-ийг гүйцэтгэх; ...EndProcedure&OnServerFunction PerformProcessingOnServer(FileName) Унших = NewTextReading(FileName) ... Үр дүн = Унших.Унших(); Үр дүнг буцаах; EndFunction

Баруун:

&OnClientProcedureFileProcessing() ...FileNameForProcessing = "C:/Файл боловсруулахад/Download.xml"; Хаяг = ""; PlaceFile(Хаяг, ФайлынНэр Боловсруулах, ФайлынНэр Боловсруулах, Худал); Үр дүн = ProcessingOnServer(Хаяг)-ыг гүйцэтгэх; ...EndProcedure&OnServerFunction ProcessingOnServer(Address) Data = GetFromTemporaryStorage(Address) IntermediateFileName = GetTemporaryFileName("txt"); Data.Write(IntermediateFileName); Унших = Шинэ Унших Текст(Завсрын ФайлынНэр) ... Үр дүн = Унших.Унших(); ...DeleteFiles(IntermediateFileName); Үр дүнг буцаах; EndFunction

2. Хэд хэдэн сервер дуудлагын хооронд өгөгдлийг түр хадгалах санд хадгалахын тулд үүнийг хадгалахдаа байрлуулахдаа параметрийг ашиглах ёстой. UniqueFormIdentifierарга PlaceFileодоогийн маягтын танигчийг түүнд оруулах замаар. Зөвхөн заасан маягтыг хаах үед ийм утгууд нь түр хадгалах сангаас устах болно. Энэ тохиолдолд нэг файлыг түр хадгалах санд дахин байрлуулахдаа өмнөх утгыг гараар устгах шаардлагатай. Жишээлбэл:

Буруу:

FileNameForProcessing = "C:/Файл боловсруулахад/Download.xml"; ... // Эхний серверийн дуудлага Хаяг = ""; PlaceFile(Хаяг, Боловсруулах ФайлынНэр, Боловсруулах ФайлынНэр, Худал, Өвөрмөц танигч); Үр дүн = InitialProcessingOnServer(Хаяг)-ыг гүйцэтгэх;
... // Ижил файлын хувилбартай хоёр дахь серверийн дуудлага Үр дүн = IntermediateProcessingOnServer (Хаяг) гүйцэтгэх; ...
// Гурав дахь серверийн дуудлага шинэ хувилбарфайлын хаяг = ""; PlaceFile(Хаяг, Боловсруулах ФайлынНэр, Боловсруулах ФайлынНэр, Худал, Өвөрмөц танигч); Үр дүн = FinalProcessingOnServer(Хаяг)-ыг гүйцэтгэх; ...

Энэ нь маягтын түр хадгалах санд файлуудын хоёр хувийг үлдээх болно. Хоёрдахь хуулбарын хаяг нь хувьсагчид байх болно Хаяг, мөн эхний хуулбарын хаяг алга болно. Энэ нь нэмэлт хэрэглээний нөөцийг ашиглах, удаашруулахад хүргэдэг.

Баруун:

FileNameForProcessing = "C:/Файл боловсруулахад/Download.xml"; ... // Эхний серверийн дуудлага Хаяг = ""; PlaceFile(Хаяг, Боловсруулах ФайлынНэр, Боловсруулах ФайлынНэр, Худал, Өвөрмөц танигч); Үр дүн = InitialProcessingOnServer(Хаяг)-ыг гүйцэтгэх; ... // Ижил файлын хувилбартай хоёр дахь серверийн дуудлага Үр дүн = IntermediateProcessingOnServer (Хаяг) гүйцэтгэх; ...
// DeleteFromTemporaryStorage(Address) файлын шинэ хувилбартай гурав дахь серверийн дуудлага; Хаяг = ""; PlaceFile(Хаяг, Боловсруулах ФайлынНэр, Боловсруулах ФайлынНэр, Худал, Өвөрмөц танигч); Үр дүн = FinalProcessingOnServer(Хаяг)-ыг гүйцэтгэх; ...

бас үзнэ үү

Тэд биднийг олдог: файлын системд нэвтрэх, GetTemporaryFileName(


Би өөрийн дадлагаас нэг тохиолдлыг хэлье. Нэг өдөр би өгөгдөл байршуулах тохиргоог хийх хэрэгтэй болсон 1c нягтлан бодох бүртгэлхуулбарлагдаагүй тохиргооноос. Буулгах нь солилцооны дүрмийн дагуу ажилладаг тусдаа боловсруулалт хэлбэрээр явагдсан. Дүрмүүд нь өөрөө хоёртын өгөгдлийн загвар хэлбэрээр хавсаргасан. Үйлдлийн алгоритм нь ердийн зүйл юм - дүрмийг түр зуурын файлд байршуулж, дараа нь боловсруулснаар татаж авдаг " Бүх нийтийн солилцоо XML формат дахь өгөгдөл."

Дамжуулах дүрэм, боловсруулалтыг зохион бүтээгч цээжээ цохиж, бүх зүйл түүний хувьд төгс ажиллаж байна гэж тангараглав. Практикт өгөгдөл байршуулах явцад алдаа байнга гардаг. Алдааны мессежийн текст нь солилцооны дүрэмд асуудал байгааг ил тод хэлсэн. "Баримт бичигт энэ өмч байхаа больсон, би үүнийг байршуулахаас татгалзаж байна" гэж мессежийн текстийг уншина уу. Би солилцооны дүрэмтэй хутгалдахыг хүсээгүй, учир нь... Энэ миний ажил биш. Харин би боловсруулах кодыг нээж, солилцооны дүрмийг түр зуурын файлд байршуулах үйл явц хэрхэн зохион байгуулагдаж байгааг харахаар шийдсэн.

Энэ нь яг ийм асуудал байсан нь тодорхой болсон. Программист солилцооны дүрмийн хувьд (түр лавлах хэсэгт) өвөрмөц файлын нэрийг гаргах гэж санаа зовоогүй бөгөөд "Хэрэв файл байгаа бол татаж авах шаардлагагүй" гэсэн чек оруулсан байна. Мэдээжийн хэрэг, боловсруулах хүртэл бүх зүйл ажилласан, эс тэгвээс дүрмүүдтэй зохион байгуулалт шинэчлэгдээгүй байна. Үүний үр дүнд хэрэглэгчид хуучирсан солилцооны дүрмийг ашиглан байнга байршуулахыг оролддог. "Түр" лавлах дахь "түр зуурын файл" нь байнгын болсон бөгөөд та үүнийг гараар устгах хүртэл үргэлж байршуулахад ашиглагдах болно.

Та түр зуурын файлуудыг зөв үүсгэх хэрэгтэй

Ийм инээдтэй нөхцөл байдлаас зайлсхийхийн тулд та COM объектуудыг ашигладаг "төвөг" функц хэлбэрээр дугуй, таягыг дахин зохион бүтээх гэж оролдох ёсгүй. Платформд суулгасан функцийг ашиглахад хангалттай - GetTemporaryFileName(), энэ нь олон асуудлыг автоматаар шийддэг:

Файлын нэр үнэхээр өвөрмөц гэдгийг баталгаажуулдаг;

Хэрэв хөгжүүлэгч өөрөө файлаа устгахаа мартсан бол дараагийн удаа платформыг эхлүүлэхэд энэ нь устгагдах болно.

Платформыг дахин эхлүүлэх үед түр зуурын файлуудыг автоматаар устгах нь онолын хувьд хөгжүүлэгч өөрөө файлуудыг устгах хэрэгцээг үл тоомсорлох боломжийг олгодог маш сонирхолтой функц юм. Үнэн, үүнийг буруугаар ашиглах нь үнэ цэнэтэй зүйл биш хэвээр байна. Хэрэв кодыг сервер дээр ажиллуулсан бол сервер удаан хугацаанд дахин асахгүй байж магадгүй бөгөөд энэ нь түр хавтас бөглөрөх болно гэдгийг ойлгох хэрэгтэй. шаардлагагүй файлууд. Үүнтэй холбогдуулан та "бохир" ажлыг платформд бүрэн итгэж болохгүй. Энэ функцийг нөөц сонголт болгон ашиглах нь илүү дээр бөгөөд түр зуурын файлыг хүчээр устгахын тулд кодын нэмэлт нэг мөр код нэмнэ.

Тэгэхээр миний нийтлэлийн утга учир юу вэ?

1. Сервер (x64), Office 2016 (x64) суулгасан, 1С 8.3.8 бас x64 (1С сервер гэсэн үг) байна. Хэрэглэгчид нимгэн клиент болон вэб клиентээр холбогддог.

2. Борлуулалтын албанаас гаргасан (бэлтгэсэн) стандарт гэрээ, нэхэмжлэхийн багц байдаг. Фонт, догол мөр гэх мэт зүйл байдаг, мэдээжийн хэрэг бүх зүйл Word, Excel 2016 (x64) дээр хийгдсэн, мэдээжийн хэрэг, энэ бүгдийг 1С дээр зурах хүсэл байхгүй, гэхдээ үүнийг ActiveDocument форматад оруулах хүсэл байдаг. зохион байгуулалт

Шийдэл нь улиг болсон мэт санагдаж байна :) , Би бүхэл бүтэн механизм, хэрхэн хийгдсэн, өгөгдлийг 1С-ээс ActiveDocument загварт хэрхэн бөглөж байгааг тайлбарлахгүй - та надгүйгээр үүнийг маш сайн мэддэг гэж бодож байна. Гэвч ажлын явцад хаант улсад бүх зүйл тийм ч жигд биш байгаа нь тодорхой болсон COM объект ov, тухайлбал:

2. ActiveDocument эсвэл Binary Data аль сонголтыг сонгох нь дээр вэ? Хэдийгээр надад энэ нь архитай шар айраг эсвэл архитай шар айраг сонгохтой адил сонсогддог :) . Ямар ч том асуудал биш, та 1С-ийн мэдээллээр баримт бичгийг бөглөж, үйлчлүүлэгч рүү шилжүүлэх хэрэгтэй.

За, дууны үгийг алгасацгаая, би ActiveDocument-ийг сонгосон, би алгоритмыг бүхэлд нь тайлбарлахгүй, би зөвхөн бэрхшээл, тэдгээрийн шийдлийг жагсаах болно. Доор дурдсан бүх зүйл бол миний хувийн таамаглал бөгөөд ямар ч тохиолдолд туйлын үнэн гэж хэлэхгүй. Та эдгээр асуудлыг шийдсэн эсвэл өөрөөр шийдсэн байж магадгүй юм.

1. Чулуу " эхлээд". SaveAs арга нь ажиллахгүй байна (MSWord болон MSExcel аль алинд нь). Хоёртын өгөгдөл бичих гэж оролдох үед 1С зүгээр л гацдаг. Жагсаалтын фрагментийг харна уу:

MSWord = Layout.Get(); Document = MSWord.Application.Documents(1); Document.Activate(); //Дараа нь бид ямар нэгэн байдлаар өгөгдлийг авч Word баримтыг бөглөнө //Түр зуурын санд файлыг хадгалах замыг авна уу TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //чулуу эндээс эхэлнэ MyDocumentInBinaryData = New BinaryData(NameTime); //за энд энэ чулууг 1С цохисон байна :) MSWord.Application.Quit();

Маш их баярлалаа.

Фолдер үүсгэх
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
асуудал шийдэгдсэн. Сэдэв хаагдсан.

Шалтгаан нь юу вэ? Шалтгаан нь код

MSWord = Layout.Get();

Ямар битийн Office суулгаснаас үл хамааран COM объектын жишээг (x32) үргэлж дууддаг. Та яагаад ActoveDocument загварт docx, xlsx өргөтгөлтэй файлуудыг оруулж болохгүй гэж бодож байсан уу?

Үүнийг мөн Task Manager-ээр дамжуулан шалгаж болно, гэхдээ ActiveDocument-ийн зохион байгуулалт нь COM инстанцыг (x32) далд хэлбэрээр дууддаг тул цаашдын бүх зохицуулалтыг энэ функцийг харгалзан үзэх ёстой.

1. Сервер болон бүх програм хангамжийн аль нэг нь x32 байх ёстой. Дараа нь та юу ч хийх шаардлагагүй (код дахин бичих утгаараа)

2. Кодоо ингэж дахин бичнэ үү

// түр зуурын файлын нэрийг авах TimeFile = GetTemporaryFileName("doc"); // энэ код нь зайлшгүй шаардлагатай битийн гүнтэй COM жишээг дуудах болно, манай тохиолдолд x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // дараа нь бүх зүйл өмнөх шиг байна Layout = Хэвлэх менежмент.Хэвлэх маягтын байршил ("Баримт бичиг. Тоног төхөөрөмж шилжүүлэх акт." + Байршлын нэр); MSWord = Layout.Get(); Document = MSWord.Application.Documents(1); Document.Activate(); // энд бид ямар нэг зүйл хийж, өгөгдлийг бөглөнө үү // энд бид COM x62-аас 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 = Тодорхойгүй; Үл хамаарах зүйл // Хэрэв алдаа гарвал алдааны өгөгдлийг хэвлэж, объектыг хаадаг. Мэдээлэл = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Алдаа - "+Мэдээлэл.Тодорхойлолт+" алдааны код - "+Abb.LP(Мэдээллийн.SourceString)); MSWord.Application.Quit(); EndAttempt;

Энд бүх зүйл тодорхой байна гэж би бодож байна, эхлээд бид шаардлагатай битийн гүнтэй COM жишээг үүсгэж, хоосон файл үүсгэж, түр хавтас руу хадгалсны дараа COM x32-тэй ажиллаж, өгөгдлийг дүүргэж, эцэст нь бүхэл бүтэн агуулгыг хуулж авлаа. баримтжуулж, өмнө нь бэлтгэсэн файлд хадгална.

Бүх зүйл адилхан, гэхдээ зөвхөн Excel-д зориулагдсан

TimeFile = GetTimeFileName("xls"); Excel = Шинэ COMObject("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.WorkSheets(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Баримт бичиг. Тоног төхөөрөмжийн нэхэмжлэх."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); WBook оролдож байна = MSExcel.Application.Workbooks(1); Sheet = WBook.WorkSheets(1); Sheet.Activate(); // бид ямар нэг зүйл хийж, 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells)-ийн өгөгдлөөр дүүргэнэ; BookN.Save(); BookN.Close(); Үл хамаарах зүйл // Хэрэв алдаа гарвал алдааны өгөгдлийг хэвлэж, объектыг хаадаг. Мэдээлэл = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Алдаа - "+Мэдээлэл.Тодорхойлолт+" алдааны код - "+Abb.LP(Мэдээллийн.SourceString)); MSExcel.Application.Quit(); EndAttempt;

Энд байна" эхлээд"Би Office x64-тэй x64 сервер дээр бүх зүйл яг цагийн шиг ажилладаг, алдаагүй, ямар ч хавтас болон бусад бүх зүйлийг үүсгэх шаардлагагүй гэж би шийдсэн.

Чулуу " хоёрдугаарт". кодын хэсэг

TimeFile = GetTimeFileName("xls");

хоол идэх нь тийм ч сайн биш, учир нь энэ хавтсанд "c:\Users\ what is there..." гэж бичдэг тул ерөнхийдөө энэ хавтас нь үргэлж бүх галт хана, вирусны эсрэг гэх мэт хар жагсаалтад байдаг. Word эсвэл Excel дээр аюулгүй байдлын хяналтын төвийг нээнэ үү. Тэнд бас харцгаая

Та үүнийг сайтар бодож үзэх хэрэгтэй, эс тэгвээс "хачин" алдаа гарч болзошгүй. Тиймээс би дараахь зүйлийг санал болгож байна.

1. Тохируулагчийг нээгээд шинэ мэдээллийн бүртгэл нэмнэ үү

Энд бид дууссан үгээ хадгалах болно, Excel файлуудМэдээжийн хэрэг аль хэдийн бөглөсөн:

LayoutName - Layout ID

DocumentOffice - Үнэ цэнийг хадгалах, энд бид бэлэн файлаа хадгалдаг

2. Бид дээрх кодыг дараах байдлаар нэмнэ.

MH = Мэдээллийн Бүртгэл.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Сонголт.Холбоос; MZ.LayoutName = LayoutName; MZ.Read(); MH.Object = Сонголт.Холбоос; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); Файлуудыг устгах(TimeFile);

Бидний хийх зүйл бол бэлэн болсон файлыг мэдээллийн бүртгэлд бичиж, түр зуурын файлыг өөрөө устгаснаар "Word, Excel Security Center"-ийн асуудлыг шийддэг. Энэ дууссан файлыг үйлчлүүлэгчид (нимгэн болон вэб үйлчлүүлэгчид) харуулах л үлдлээ.

3. Чулуу " гурав дахь" - үйлчлүүлэгч рүү файл шилжүүлэх, би энд зүгээр л бүх кодыг нийтлэх болно, заримыг нь BSP-ээс, заримыг нь "Удирдлагын программ"-ын демо тохиргооноос, заримыг нь интернетээс, гэхдээ ерөнхийдөө код нь энд байна (түүний дотор бүхэлд нь)

///////////////////////////////////////////////////////// ///////////////////////// // ҮЙЛЧИЛГЭЭНИЙ ҮЙЛЧИЛГЭЭ БА ФУНКЦИУД BSP &OnServer функц GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = Мэдээллийн Бүртгэл. TemporaryStorageOffice.CreateRecordKey(Шинэ бүтэц("Object,LayoutName",ObjectLink,LayoutName)); // Хаяг = GetNavigationLink(RecordKey,"OfficeDocument"); Буцах хаяг; EndFunction // &OnClient Procedure AfterApplicationStart(ReturnCode, ApplicationName) Экспорт; // Процедурын төгсгөл &Файлуудыг хүлээн авсны дараа үйлчлүүлэгчийн процедур дээр (Шилжүүлсэн файлууд, нэмэлт параметрүүд) Хэрэв дамжуулагдаагүй бол экспорт хийх Файлууд = Тодорхойгүй Дараа нь Дамжуулсан файлын мөчлөгийн тодорхойлолт бүрийн хувьд OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Na ); StartLaunchApplication(OpAfterStartApplication, Тодорхойлолт.Нэр); Төгсгөлийн мөчлөг; endIf; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Export SelectedFiles = Тодорхойгүй бол буцаана; endIf; Лавлах = Сонгосон файлууд; GeneralPurposeServerCall.SaveWorkingDirectory(Лавлах); Хэрэв CommandName = "Нэхэмжлэх" Дараа нь LayoutName = "Нэхэмжлэх" EndIf; DataStructure.Insert("Лавлах", Лавлах); ConnectWaitingHandler("Connectable_SendFileToClient",5,Үнэн); Процедурын төгсгөл &Үйлчлүүлэгчийн процедур дээр Өргөтгөлөөр дамжуулан файлуудыг нээх (Тушаалын нэр) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Лавлах = GeneralPurposeCallServer.GetWorkingDirectory(); Хэрэв лавлах = Тодорхойгүй ЭСВЭЛ лавлах = "" Дараа нь Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Файлуудыг түр хадгалах санг сонгох"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Else SelectedFiles = Шинэ массив; SelectedFiles.Add(Лавлах); Сэрэмжлүүлэг боловсруулах(OpAfterSelectingDirectory, SelectedFiles); endIf; Процедурын төгсгөл &Үйлчлүүлэгчийн процедурын процесс дээр Өргөтгөлүүдийг Файлуудтай ажиллах(Өргөтгөл холбогдсон, Нэмэлт Параметрүүд) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient Procedure Connected_PassFileToClient() Хаяг = GetLayout(); Хэрэв хаяг<>Тодорхойгүй Дараа нь DisableWaitHandler("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Лавлах = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Directory+"\"+LayoutName+"_No"+DocumentNumber+".xls"; Тайлбар = Дамжуулсан файлын шинэ тайлбар (Файлын зам, хаяг); TransferredFiles = Шинэ массив; TransferredFiles.Add(Тодорхойлолт); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", Худал); endIf; Процедурын төгсгөл &Серверийн процедур дээр ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Шинэ массив; Объектуудын массив.Add(ObjectRef); Баримт бичиг.Төхөөрөмжийн Нэхэмжлэх.ХэвлэхНэхэмжлэх(Объект массив, Байршлын нэр, Үнэн); EndProcedure &OnClient Procedure Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Объект", Холбоос); DataStructure.Insert("LayoutName", "Нэхэмжлэх"); ConnectWaitingHandler("Холбох_хэвлэх", 1, үнэн); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); FileWorking Өргөтгөлийг суулгаж эхлэх(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End Standard Subsistems.Print

Хэд хэдэн тодруулга:

1. Нэгдүгээрт, манай үйлчлүүлэгч Нимгэн болон Вэб горимын аль алинаар нь ажилладаг тул бид Тохируулагчийн шинж чанарт дараах утгуудыг урьдчилан тохируулдаг.

Хөтөчтэй ажиллахад асуудал гарахаас зайлсхийхийн тулд

2. Бид дуудлагын синхрончлолтой холбоотой асуудлаас зайлсхийхийн тулд хүлээх зохицуулагчийг ашигладаг (энэ нь зөвхөн вэб горимд хамаарна)

3. Эцэст нь Файлуудтай ажиллах өргөтгөлийг холбоно уу (энэ горимд байгаа гэдгийг санаарай Нимгэн үйлчлүүлэгч, энэ өргөтгөл үргэлж идэвхждэг). Мөн кодоор дамжуулан:

Бид Navigation Link механизмыг ашиглан файлыг үйлчлүүлэгч рүү шилжүүлдэг, бид хөтөч дээр дараах мессежийг хүлээн авдаг (Thin өөрөө ажилладаг):

За ингээд л байх шиг байна. Энэ нь хэн нэгэнд тусална гэж найдаж байна ...

Word-ийн тухайд Excel файлуудыг хоёртын өгөгдөл болгон оруулсан уу? Юу болов?

1. Бид энэ хоёртын өгөгдлийг байрлалаас гаргаж аваад 1С-ийн өгөгдлөөр дүүргэж АНХААРАЛ дахин хоёртын өгөгдөл (шар айрагтай архи эсвэл архитай шар айраг) хэлбэрээр бичих хэрэгтэй.

2. Эсвэл бид Client тал дээр BinaryData layout-г авч, тэнд бөглөх ёстой, ГЭХДЭЭ COM объектыг зөвхөн IE хөтчөөр дэмждэг ба дараа нь ActiveX тохиргоотой бүжгүүдээр бусад хөтчүүд ActiveX-ийн хэрэглээг аль эрт орхисон.

1C: Enterprise 8 технологийн платформ нь танд хэмнэлт гаргах боломжийг олгодог мэдээллийн бааздурын файлууд, тэдгээрийг тэндээс аваад ашиглах янз бүрийн арга замууд. Эдгээр үйлдлүүдийг жишээн дээр авч үзье.

1С мэдээллийн санд файл байршуулахаас өмнө та диск дээрх файлын бүрэн хаягийг авах хэрэгтэй. Файл сонгох харилцах цонхтой ажиллахыг -д тайлбарласан болно.

Файлуудыг хадгалахын тулд төрөл бүхий атрибут (эсвэл бүртгэлийн нөөц) ашиглана уу Хадгалах үнэ цэнэ.

1С мэдээллийн санд дурын файл байршуулах

Аливаа файлыг хоёртын өгөгдөл хэлбэрээр дүрсэлж, ачаалж болно Үнэ цэнэ хадгалах.

Хоёртын өгөгдлийг объект руу хөрвүүлэх үед Хадгалах үнэ цэнэашигласан загвар шинэ Хадгалах Утга (Өгөгдөл, Шахалт)хоёр параметртэй:

  1. Өгөгдөл— Хадгалахад хадгалах шаардлагатай хоёртын өгөгдөл
  2. Шахах— Дефляцийн алгоритмын шахалтын харьцаа. -1...9 муж дахь бүхэл тоо. -1 нь анхдагч шахалтын түвшин юм. 0 - шахалт байхгүй, 9 - хамгийн их шахалт. Өгөгдмөл утга: -1. Параметр нь сонголттой, хэрэв заагаагүй бол шахалтыг ашиглахгүй.

//Файлыг хоёртын өгөгдөл болгон хөрвүүлнэ
Файл = Шинэ хоёртын өгөгдөл(зам);

//Үнэ хадгалах шинэ объект үүсгэнэ

DataStorage = NewValueStorage(Файл, NewDataCompression(9) );

1С мэдээллийн сангаас дурын файлыг диск рүү хадгалах

1С мэдээллийн сангаас диск рүү файл хадгалахын тулд та зам, файлын нэрийг тодорхойлох хэрэгтэй. Үүнийг хийхийн тулд файл хадгалах харилцах цонх байдаг бөгөөд үүнтэй ажиллах талаар тайлбарласан болно.

//Хадгалах сангаас хоёртын өгөгдөл авах
//Өгөгдлийн хадгалалт - Утга хадгалах төрөл бүхий объектын шинж чанар

//Хүлээн авсан өгөгдлийг дискэнд бичнэ
//IN хувьсах замнь дискэн дээрх файлын бүрэн хаяг юм
Өгөгдөл. Бичих (зам);

1С мэдээллийн санд байрлах файлыг үзэх

Өгөгдлийн санд хадгалагдсан файлыг үзэхийн тулд таны компьютерт уг файлыг нээх програм суулгасан байх ёстой.

//Шаардлагатай өргөтгөлтэй түр файлын нэрийг авна
//Өргөтгөлийн хувьсагчид файлын өргөтгөлийг оруулах хэрэгтэй, жишээ нь "pdf"
Зам = GetTemporaryFileName(Өргөтгөл) ;

// Хадгалалтаас өгөгдөл хүлээн авах
//Өгөгдлийн хадгалалт - Утга хадгалах төрөл бүхий объектын шинж чанар
Өгөгдөл = Өгөгдлийн сан. Get();

//Түр файлд өгөгдөл бичих
Өгөгдөл. Бичих (зам);

//Зориулалтын программ дахь файлыг нээхийг оролдож байна
//Хэрэв програм олдохгүй бол "Нээх..." системийн харилцах цонх гарч ирнэ.
LaunchApplication(Path);

Ихэнхдээ хэрэглэгчид хачирхалтай алдаатай тулгардаг: програм нь нэг хэрэглэгчийн хувьд зөв ажилладаг, харин өөр компьютер дээр, өөр компьютер дээр энэ нь огт өөрөөр ажилладаг. Ихэнхдээ удаан хугацааны мөрдөн байцаалтын дараа 1С 8 дээрх ийм "гажиг" -ын шалтгаан нь кэш болдог.

Доор би 1С кэш гэж юу болох, түүнийг хэрхэн цэвэрлэх талаар танд хэлэх болно.

Кэш хийх- байнга ашиглагддаг, дүрмээр бол статик мэдээллийн буфер үүсгэх үйл явц. Хөтөлбөрийг хурдасгахын тулд кэшийг ашигладаг; тухайлбал 1С-д тохиргооны файлуудыг серверээс байнга шаардахгүйн тулд хэрэглэгчийн компьютерт ачаалдаг.

Гэсэн хэдий ч ихэнхдээ 1С платформ нь тохиргооны кэшийг зөв зохицуулдаггүй бөгөөд үүний үр дүнд бид тохиргооны зохисгүй үйлдэлтэй болдог.

Буруу үйлдлийн шалтгаан нь өөр байж болно: динамик тохиргооны шинэчлэлт, програм хангамж эсвэл техник хангамжийн доголдол.

Эхний арга бол 1С кэшийг гараар цэвэрлэх явдал юм

1С-ийн асуудал, "гадаа" -ыг шийдвэрлэхийн тулд 1С 8.3 платформын кэшийг цэвэрлэх нь ихэвчлэн тусалдаг.

Үүнийг дараах байдлаар хийнэ.

1-р алхам

Түр зуурын 1С файлууд хадгалагдаж буй лавлахыг олоорой, тэдгээрийг IB жагсаалтын тохиргооны цэснээс харж болно.

Алхам 2

Бид ийм хаягтай болсон

1С дээр 267 видео хичээлийг үнэгүй аваарай:

C:\Documents and Settings\хэрэглэгчийн нэр\Application Data\1C\1Cv82\tmplts\1c

Кэш фолдерууд энд байрладаг

C:\Документ ба тохиргоо\хэрэглэгчийн нэр\Програмын өгөгдөл\1C\1Cv82\

* энд хэрэглэгчийн нэр нь системийн хэрэглэгчийн нэр бөгөөд 1Cv82 хавтас нь 1С платформын хувилбараас хамаарч өөр байж болно.

Тэнд очсоны дараа бид олон сонирхолтой хавтас оллоо (хавтасны тоо нь тохиргооны тоотой тэнцүү байна):

Сонгосон бүх лавлахууд нь 1С мэдээллийн сангийн кэш бөгөөд аюулгүйгээр устгагдах боломжтой. Устгахаасаа өмнө мэдээллийн аюулгүй байдлын системээс гарах ёстой.

Хэрэв та файлууд хаана байгааг хайхыг хүсэхгүй байвал ашиглаж болно тусгай хөтөлбөр(Бат файл), түр зуурын файл бүхий хавтсыг цэвэрлэдэг - татаж авах . Та эдгээрийг эрсдэлд оруулдаг гэдгийг санаарай. Тэд дараах тушаалыг агуулна.

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

1С түр зуурын файлуудыг цэвэрлэх хоёр дахь арга бол мэдээллийн санг жагсаалтаас устгах явдал юм

Хоёр дахь арга нь илүү хялбар боловч энэ нь бүрэн зөв биш юм. Үүнийг цэвэрлэхийн тулд энэ тохиргоог устгаад мэдээллийн аюулгүй байдлын ижил замтай шинээр үүсгэнэ үү.

Үүний үр дүнд кэштэй хуучин хавтас энэ мэдээллийн аюулгүй байдлын системээс "холбогдохгүй" болж, шинэ лавлах үүснэ.

Та үүнийг хийж болно, кэш арилсан боловч түр зуурын файлууд хатуу диск дээр үлддэг.

Гурав дахь арга нь ClearCache параметр юм

Нэмэлт эхлүүлэх параметрүүдэд командыг оруулах шаардлагатай (өгөгдлийн сангийн жагсаалт, Өөрчлөх товч, сүүлчийн таб) /ClearCache. Хэрэглээний жишээ:

1С програм дахь кэшийг цэвэрлэх тухай видео:

Хэрэв кэшийг цэвэрлэсний дараа 1С дахь "гадаа" арилахгүй, 1С таны хүссэнээр ажиллахгүй бол та хандаж болно.

Хэрэв та 1С програмчлалыг сурч эхэлж байгаа бол манайхыг санал болгож байна үнэгүй курс(битгий мартаарай YouTube-д бүртгүүлэх - шинэ видеог тогтмол гаргадаг):