Windows-virhe: toiminnon suoritusvirhe, korjattu minuutissa. Windows-virhe: toiminnon suoritusvirhe, korjattu minuutissa Asetustarkistus korjaamaton virhe 1s 7.7

Joten mikä on artikkelini pointti?

1. On palvelin (x64), jossa asennettu Office 2016 (x64), on 1C 8.3.8 myös x64 (tarkoittaa 1C-palvelinta). Käyttäjät muodostavat yhteyden sekä ohuen asiakkaan että verkkoasiakkaan kautta.

2. On olemassa joukko vakiosopimuksia ja myyntiosaston laatimia (valmistelleita) laskuja. On fontti, kappale jne., tietysti, kaikki on suunniteltu Wordissa, Excel 2016:ssa (x64), luonnollisesti ei ole halua piirtää kaikkea tätä 1C: ssä, mutta halutaan laittaa se ActiveDocument-muotoon asettelut

Ratkaisu vaikuttaa banaalilta :) , en kuvaile koko mekanismia, miten se tehdään, kuinka tiedot täytetään 1C:stä ActiveDocument-asetteluun - luulen, että tiedät tämän täydellisesti ilman minua. Mutta työn aikana kävi ilmi, että kaikki ei ole niin sujuvaa COM-objektien alueella, nimittäin:

2. Kumpi vaihtoehto on parempi valita: ActiveDocument vai Binary Data? Vaikka minusta se kuulostaa vähän siltä kuin valitsisi Vodkan oluen tai Olut vodkan kanssa :) . Ei iso juttu, sinun on täytettävä asiakirjat 1C:n tiedoilla ja siirrettävä ne asiakkaalle.

No, okei, ohitetaan sanoitukset, valitsen ActiveDocumentin, en kuvaile koko algoritmia, vaan luettelen vain sudenkuopat ja niiden ratkaisut. Kaikki alla kerrottu on henkilökohtaista spekulaatiota, eikä se missään tapauksessa väitä olevansa lopullista totuutta. Olet ehkä ratkaissut nämä ongelmat tai ratkaissut ne eri tavalla.

1. Kivi " ensimmäinen". SaveAs-menetelmä ei toimi (sekä MSWordille että MSExcelille). Kun yritetään kirjoittaa binaaridataa, 1C yksinkertaisesti kaatuu. Katso luettelon fragmentti:

MSWord = Layout.Get(); Kokeile Document = MSWord.Application.Documents(1); Document.Activate(); //Seuraavaksi saamme jotenkin tiedot ja täytämme Word-asiakirjan //Hae polku väliaikaiseen hakemistoon tallentaaksesi tiedoston sinne TimeName = GetTemporaryFileName(.docx"); Document.SaveAs(NimiAika); //kivi alkaa tästä MyDocumentInBinaryData = New BinaryData(NimiAika); //no, tässä tämä kiven tyrmäsi 1C :) MSWord.Application.Quit();

Kiitos paljon.

Kansioiden luominen
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
ongelma ratkesi. Aihe suljettu.

Mikä on syy? Syynä on koodi

MSWord = Layout.Get();

Kutsuu aina COM-objektin esiintymää (x32) riippumatta siitä, minkä bittisyyden Office on asennettu. Oletko koskaan miettinyt, miksi et voi lisätä tiedostoja, joiden tunniste on docx, xlsx, ActoveDocument-asetteluun?

tämä voidaan tarkistaa myös Tehtävienhallinnan kautta, mutta tosiasia on, että ActiveDocument-asettelu kutsuu implisiittisesti COM-instanssia (x32) ja siksi kaikki muut käsittelyt on tehtävä ottaen tämä ominaisuus huomioon.

1. Joko palvelimen ja kaikkien ohjelmistojen on oltava x32. Silloin sinun ei tarvitse tehdä mitään (koodin uudelleenkirjoittamisen mielessä)

2. Kirjoita koodi uudelleen tällä tavalla

// hanki väliaikaistiedoston nimi TimeFile = GetTemporaryFileName("doc"); // tämä koodi ehdottomasti kutsuu vaaditun bittisyvyyden COM-instanssia, meidän tapauksessamme x64 Word = New COMObject("Word.Application"); Word.Näyttöhälytykset = 0; AsiakirjaN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // sitten kaikki on kuten ennen Layout = Printing Form Layout ("Dokumentti. Laitteen siirtolaki." + Layout Name); MSWord = Layout.Get(); Kokeile Document = MSWord.Application.Documents(1); Document.Activate(); // tässä teemme jotain, täytämme tiedot // tässä tallennamme tiedostomme uudelleen COM x62:sta COM x64:ään MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); AsiakirjaN = MSWord.Application.Documents.Open(TimeFile); AsiakirjaH.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); AsiakirjaN.Sulje(); MSWord = määrittelemätön; Poikkeus // Jos tapahtuu virhe, virhetiedot tulostetaan ja objekti suljetaan. Tiedot = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Virhe - "+Information.Description+" virhekoodi - "+Abstract(Information.SourceString)); MSWord.Application.Quit(); EndAttempt;

Mielestäni tässä kaikki on selvää, ensin loimme tarvittavan bittisyvyyden COM-esiintymän, loimme tyhjän tiedoston ja tallensimme sen väliaikaiseen kansioon, sitten työskentelemme COM x32:n kanssa, täytämme sen tiedoilla ja lopuksi kopioimme koko tiedoston sisällön. asiakirja ja tallenna se aiemmin valmisteltuun tiedostoon.

Kaikki on sama, mutta vain Excelille

TimeFile = GetTimeFileName("xls"); Excel = Uusi COMObject("Excel.Application"); Excel.Displayalerts = 0; KirjaH = Excel.Työkirjat.Lisää(); SheetN = BookN.WorkSheets(1); BookN.SaveAs(aikatiedosto, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Dokumentti.Laitteistolasku."+LayoutName); MSExcel = Layout.Get(); KirjaN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(1); Kokeile WBook = MSExcel.Application.Workbooks(1); Sheet = WBook.WorkSheets(1); Sheet.Activate(); // teemme jotain, täytämme sen tiedoilla hakemistosta 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); KirjaN.Tallenna(); KirjaH.Sulje(); Poikkeus // Jos tapahtuu virhe, virhetiedot tulostetaan ja objekti suljetaan. Tiedot = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Virhe - "+Information.Description+" virhekoodi - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

Ole hyvä " ensimmäinen”Päätin, että x64-palvelimella, jossa on Office x64, kaikki toimii aivan kuten kellonkello, ilman virheitä, eikä kansioita ja kaikkea muuta tarvitse luoda.

kivi" toinen". koodinpätkä

TimeFile = GetTimeFileName("xls");

syöminen ei ole kovin hyvä, koska se kirjoittaa kansioon: "c:\Users\ what's there...", yleensä tämä kansio on aina kaikkien palomuurien, virustorjuntaohjelmien jne. jne. mustalla listalla osoitteessa ainakin avaa suojauskeskus Wordissa tai Excelissä. Katsotaanpa sinnekin

Sinun täytyy käsitellä tätä, muuten on mahdollista, että "outoja" virheitä ilmestyy. Siksi ehdotan seuraavaa:

1. Avaa Configurator ja lisää uusi tietorekisteri

tänne tallennamme valmiin Sanamme, Excel-tiedostoja jo täytetty, tietysti:

LayoutName – ulkoasun tunnus

DocumentOffice - Value Storage, tässä säilytämme valmiin tiedostomme

2. Lisäämme yllä olevan koodin seuraavasti:

MH = Tietorekisterit.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.Lue(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); DeleteFiles(TimeFile);

Kirjoitamme valmiin tiedoston tietorekisteriin ja poistamme sitten itse väliaikaistiedoston, mikä ratkaisee "Word, Excel Security Centerin" ongelman. Jäljelle jää vain näyttää tämä valmis tiedosto asiakkaalle (ohut- ja verkkoasiakkaat)

3. Kivi " kolmas" - siirrän tiedoston asiakkaalle, tänne kirjoitan vain koko koodin, osa otettu BSP:stä, osa ”Managed Application” -demokokoonpanosta, osa Internetistä, mutta yleensä tässä on koodi (saamassa kokonaisuus)

////////////////////////////////////////////////// ////////////////////////// // PALVELUMENETTELYT JA TOIMINNOT BSP &OnServer-funktio GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Record Key = Tietorekisterit. CreateRecordKey("Object,LayoutName",ObjectLink,LayoutName)); // Osoite = GetNavigationLink(RecordKey,"OfficeDocument"); Palautusosoite; EndFunction // &OnClient Procedure AfterApplicationStart(ReturnCode, ApplicationName) Export; // Toimenpiteen päättyminen &Asiakasproseduurissa tiedostojen vastaanottamisen jälkeen (siirretyt tiedostot, lisäparametrit) Vie, jos EI lähetetty tiedostot = määrittelemätön sitten kullekin lähetettyjen tiedostojen kuvaukselle Cycle OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisName, Description.Object. ); StartLaunchApplication(OpAfterStartApplication, Description.Name); EndCycle; loppu Jos; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Vie, jos SelectedFiles = määrittelemätön, sitten Palauta; loppu Jos; Hakemisto = SelectedFiles; General PurposeServerCall.SaveWorkingDirectory(Directory); Jos CommandName = "Lasku" Sitten LayoutName = "Lasku" EndIf; DataStructure.Insert("Hakemisto", Hakemisto); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Toimenpiteen loppu &Asiakasohjelmassa Avaa tiedostot laajennuksen kautta (komennon nimi) OpAfterSelectingDirectory = Uusi DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Hakemisto = GeneralPurposeCallServer.GetWorkingDirectory(); Jos Hakemisto = Määrittelemätön TAI Hakemisto = "" Sitten Dialog = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Hakemiston valinta tiedostojen väliaikaista tallennusta varten"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Muuten SelectedFiles =; SelectedFiles.Add(Directory); Suorita hälytyskäsittely (OpAfterSelectingDirectory, SelectedFiles); loppu Jos; Toimenpiteen loppu &AsiakasproseduuriprosessissaConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); loppu Jos; EndProcedure &OnClient Procedure Connected_PassFileToClient() Address = GetLayout(); Jos Osoite<>Määrittämätön Sitten DisableWaitHandler("Connectable_SendFileToClient"); AsiakirjanNumber = DataStructure.DocumentNumber; Hakemisto = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Hakemisto+"\"+LayoutName+"_No"+DocumentNumber+.xls"; Kuvaus = Lähetetyn tiedoston uusi kuvaus (polku tiedostoon, osoite); TransferredFiles = Uusi array; TransferredFiles.Add(Description); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); loppu Jos; Toimenpiteen lopetus &Palvelinmenettelyssä ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("Asiakirjan numero", ObjectReference.Number); ObjectArray = Uusi taulukko; Array of Objects.Add(ObjectRef); Documents.Equipment Invoice.Print Invoice(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("Objekti", Linkki); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(komento.Nimi,lomakkeennimi); Aloita FileWorking Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("KomennonNimi",Komennon Kuvaus.Identifier))); EndProcedure // Lopeta StandardSubsystems.Print

Muutama selvennys:

1. Ensinnäkin asiakkaamme toimii sekä Thin- että Web-tilassa, joten asetamme etukäteen seuraavat arvot Configuratorin ominaisuuksissa:

Välttääksesi ongelmia työskennellessäsi selaimen kanssa

2. Käytämme odotuskäsittelijöitä välttääksemme ongelmia puheluiden synkronoinnissa (tämä koskee vain verkkotilaa)

3. Liitä lopuksi tiedostojen käsittelyä varten laajennus (muista, että Thin Client -tilassa tämä laajennus on aina käytössä). Ja koodin kautta:

siirrämme tiedoston asiakkaalle NavigationLink-mekanismin avulla, saamme selaimeen seuraavat viestit (Thin toimii itsestään):

No siinä näyttää olevan kaikki. Toivottavasti tästä on jollekin apua...

Mitä tulee Wordiin, Excel-tiedostot lisätty binääritietoina? mikä on ongelma?

1. Meidän on joko vedettävä tämä binääritieto asettelusta ja täytettävä se 1C:n tiedoilla ja HUOMIO, kirjoitettava se uudelleen muistiin binääritietojen muodossa (vodka oluen kanssa tai olut vodkan kanssa)

2. Joko meidän on hankittava BinaryData-asettelu Client-puolelle ja täytettävä se sinne, MUTTA COM-objektia tukee vain IE-selain ja sitten tansseilla ActiveX-asetuksella muut selaimet ovat jo pitkään luopuneet ActiveX:n käytöstä

Uskon, että jokainen "seitsemästä" ohjelmoijasta on kohdannut tällaisen virheen ainakin kerran. Se voi tapahtua joko "kokoonpanojen yhdistämisen" tai "tietoturvan testauksen ja korjaamisen aikana".

Mutta kaikki eivät yrittäneet "korjata" kokoonpanoa. Tällaisissa tapauksissa he yleensä joko etsivät kiihkeästi varmuuskopioita tai (monimutkaisempi menetelmä) turvautuvat GComp-apuohjelman apuun, joka "legendan mukaan" voi parantaa MD:n, jos se yksinkertaisesti "puretaan" ja sitten "kootaan" ohjelman toimintoja. Todellakin, niin se on. Mutta ei kaikissa tapauksissa... Juuri tätä tapausta haluaisin tarkastella tässä artikkelissa.

Eli alkutiedot:

- "rikki konfiguraatio";

Apuohjelma MDDiags

- KaukanaManager ja laajennus DocFileSelain hänelle. Tämän laajennuksen avulla voit mennä MD:n sisään ja työskennellä sen objektien kanssa.

Koska Configurator kieltäytyy edes näyttämästä tätä "korjaamatonta virhettä", suoritamme sen MDDiags tunnistaakseen sen tai heidät.

Kun olet käynnistänyt apuohjelman, valitse haluamasi kokoonpano, sitten kaikki oletusasetukset... suorita, analysoi, hanki tulos.

Sinulla voi olla muita virheitä, mutta uskon, että pystyt selvittämään ne, kun sinulla on yleinen käsitys siitä, kuinka virhe löydetään ja kuinka se korjataan.

1. Virhe>(\\ lehti)

Apuohjelma teki selväksi, että virhe havaittiin kahdessa objektissa "\\ Journal\Journal_Number 212" ja "\\Journal\Journal_Number 860". Nyt mennäänKaukana ja katso siellä olevia esineitä.


Näemme tässä useita objekteja ja yhden tiedoston "Container.Contents". Se tallentaa näiden samojen objektien kuvaukset. Tutkittuamme huolellisesti tiedoston sisällön ymmärrämme, että kahdelle objektillemme ei ole kuvaajia.

Lisää kuvauksia kuvan osoittamalla tavalla.

Ongelma ratkaistu.

2. Virhe DOCUMENT.Receipt Invoice (\\kirjoitettu teksti\UserHelp_Numero434\Säiliö.Sisällys)

Menemme taas MD:hen merkittyä polkua pitkin. Avaa tiedosto" Säiliö. Sisällys " ja katso huolellisesti sen sisältöä.

Oudot sanat Cgntainer, Contentq, Prmgram tarttuvat heti silmään. Aivan oikein, nämä ovat väärin kirjoitettuja tunnisteita. Ei ole vaikea arvata, kuinka sen pitäisi olla oikein (jos se on vaikeaa, siirry seuraavaan haaraan, avaa sama "Container.Contents" -tiedosto ja katso, miten se pitäisi kirjoittaa).

3. VirheHAKEMISTO.Tyypilliset toiminnot(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Avaa tiedosto määritetyssä polussa ja katso tarkkaan... Kaikki parametrit tulee laittaa lainausmerkkeihin. Yhdessä parametrissa on "välilyönti" "lainaus" sijaan - korjaamme sen (tämä virhe voi tapahtua, kun objektin jonkin elementin kuvaus (kenttä, painike, arvoluettelo jne.) sisältää yhden tai kaksoislainaus tai jokin "erikoismerkeistä").

Aloitetaan taas MDDiags ja näemme, että kaikki aiemmat virheet ovat kadonneet, mutta toinen virhe on ilmaantunut.

Nyt on aika kääntyä GComp-apuohjelman puoleen ja tarkistaa "legenda"...

Käynnistämme apuohjelman, valitsemme rikkinäisen (toistaiseksi) MD:n ja kansion, johon meidän pitäisi sijoittaa asetukset objektien mukaan lajiteltuina, sitten kaikki valintaruudut ovat oletuksena, ainoa asia on valita "poista" -valintaruutu tyhjiä malleja taulukot" "Yleiset parametrit" -välilehdellä, napsauta "Decompile".

Siirry sitten ilman pitkiä puheita "käännös" -välilehdelle, aseta lähdehakemisto siihen, jossa juuri jäsensit kokoonpanon, ja ilmoita polku uudelle MD:lle.

Apuohjelma kokoaa kaiken turvallisesti.

Nyt meidän on vain pakko Kaukopäällikkö korvaa "rikkinäisen" MD:n sisällä oleva vastaava tiedosto "juuri kootun" tiedostolla (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Tarkistamme kokoonpanon uudelleen käyttämällä MDDiags.

Kaikki näyttää olevan kunnossa. Nyt siirrymme konfiguraattoriin ja teemme "tietoturvan testauksen ja korjauksen" varmistaaksemme, että virheitä ei enää ole.

Siinä kaikki. Anna minun pitää lomani. Ja olkoon Voima kanssasi!)

P.S. Erityinen kiitos esimerkissä käytettyjen apuohjelmien kehittäjille - he auttavat meitä kaikkia elämään niin paljon...

Hyvää iltapäivää!. Viime kerralla tarkastelimme, kuinka ratkaista "Virhe muunnoksia käytettäessä" Tarkista määritettyjen muunnosten polkujen oikeellisuus, tänään kerron sinulle toisesta siitä johtuvasta seurauksesta. Julkaisun aiheena on tilanne, jossa et voi asentaa 1C-alustaa ja saat viestin: Windows-virhe: toiminnon suoritusvirhe, ratkaisemme sen minuutissa, olen varma, että aihe on hyödyllinen monille.

Miltä funktion suoritusvirhe näyttää?

Kuten edellä kirjoitin, saan tämän ongelman Windows Server 2012 R2 -päätepalvelimessa, kun yritän asentaa 1C 8.2 -alustan. Kun olet suorittanut setup.exe-tiedoston, ohjattu asennusikkuna tulee näkyviin ja heti lisäikkuna, jossa on viesti:

Windows-virhe: toiminnon suoritusvirhe

Mistä saat tämän ilmoituksen:

Kuten useimmissa tapauksissa 1C-alustalla, kaikki voidaan ratkaista pienellä korjauksella asetustiedostoissa. Ota ensin käyttöön piilotetut kansiot, koska tarvitsemamme tiedosto ei ole oletusarvoisesti näkyvissä. Etsi seuraavaksi kansio C:\-asemasta Ohjelmoida tiedostoa.

C:\ProgramData\1C\1CEStat\1CEStat.cfg

1CEStat.cfg-tiedosto voidaan avata millä tahansa tekstieditori, napsauta sitä hiiren kakkospainikkeella ja valitse "Avaa sovelluksella" ja sitten kätevä editori.

Etsi 1CEStat.cfg-tiedostosta parametri, sinun on poistettava se ja tallennettava tiedosto.

Jos katsot lokeja tapahtumien katseluohjelmassa, näet tällaisia ​​tapahtumia.

Tapahtumakoodi 1013: Tuote: 1C:Enterprise 8.2 (8.2.19.130) -- Windows-virhe: Toiminnon suoritusvirhe.

Tapahtumakoodi 11708: Tuote: 1C:Enterprise 8.2 (8.2.19.130) -- Asennus epäonnistui.

Kun poistimme ADMINISTRATIONFUNC=0-parametrin, saimme jo:

Tapahtumatunnus 1033: Windows Installer on asentanut tuotteen. Tuote: 1C:Enterprise 8.2 (8.2.19.130). Versio: 8.2.19.130. Kieli: 1049. Valmistaja: 1C. Asennus valmis, tila: 1603.




Yläosa