Грешка во Windows: грешка при извршување на функцијата, ја решаваме за една минута. Грешка на Windows: грешка при извршување на функцијата, ја решаваме за една минута Проверка на конфигурација фатална грешка 1s 7.7

Па која е поентата на мојата статија?

1. Има сервер (x64), со инсталиран Office 2016 (x64), има 1C 8.3.8 и x64 (значи сервер 1C). Корисниците се поврзуваат и преку тенок клиент и преку веб-клиент.

2. Има многу стандардни договори и фактури издадени (подготвени) од одделот за продажба. Има фонт, пасус итн., Се разбира, сè е дизајнирано во Word, Excel 2016 (x64), се разбира, нема желба да се нацрта сето ова во 1C, но постои желба да се втурне во ActiveDocument формат распоред

Одлуката е банална, изгледа :) , нема да го опишам целиот механизам за тоа како се прави ова, како податоците се пополнуваат од 1C во распоредот на ActiveDocument - мислам дека ова совршено добро го знаете без мене. Но, во текот на работата се покажа дека не е сè толку мазно во областа на COM објектите, имено:

2. Која опција е подобро да се избере: ActiveDocument или BinaryData? Иако за мене звучи како што да одберам Вотка со пиво или пиво со вотка :) . Една смоква, треба да ги пополните документите со податоци од 1C и да ги пренесете на Клиентот.

Па, во ред, да го прескокнеме текстот, го избирам ActiveDocument, нема да го опишам целиот алгоритам, едноставно ќе ги наведам „стапиците“ и нивното решение. Сето следново е моја лична измислица и на ниту еден начин не тврди дека е крајната вистина. Можеби сте ги решиле овие проблеми или сте ги решиле поинаку.

1. Камен“ прво". Методот SaveAs не работи (и за MSWord и за MSExcel). Кога се обидувате да напишете BinaryData, 1C едноставно паѓа. Го гледаме фрагментот од списокот:

MSWord = Layout.Get(); Документ за обид = MSWord.Application.Documents(1); Document.Activate(); //Следно, некако земете ги податоците и пополнете го документот Word //Добијте ја патеката во привремениот директориум за да ја зачувате датотеката таму TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //каменот започнува овде MyDocumentInBinaryData = Нов бинарен податок (NameTime); //па, овде овој камен исфрла 1C :) MSWord.Application.Quit();

Благодарам многу.

Креирајте папки
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
го реши проблемот. Темата е затворена.

Што е причината? Причината е што кодот

MSWord = Layout.Get();

Секогаш повикува на пример од COM објект (x32) без оглед на тоа каква битност е инсталирана Office. Дали некогаш сте се запрашале зошто датотеките со наставката docx, xlsx не можат да се вметнат во распоредот ActoveDocument

ова може да се провери и преку Task Manager, но факт е дека распоредот на ActiveDocument имплицитно повикува примерок на COM (x32) и затоа сите понатамошни манипулации мора да се направат земајќи ја предвид оваа функција.

1. Или серверот и целиот софтвер мора да бидат x32. Тогаш не треба да правите ништо (во смисла на препишување на кодот)

2. Или препишете го кодот на таков начин

// добијте го привременото име на датотеката TempFile = GetTemporaryFileName("doc"); // овој код точно ќе повика COM пример од потребната битност, во нашиот случај x64 Word = New COMObject("Word.Application"); збор.изјави за прикажување = 0; DocumentN = Word.Application.Documents.Add(); DocumentH.SaveAs(TimeFile,0); Word.Quit(); // тогаш сè е како порано Layout = PrintControl.PrintFormLayout("Document.Equipment Transfer Certificate."+LayoutName); MSWord = Layout.Get(); Документ за обид = MSWord.Application.Documents(1); Document.Activate(); // направи нешто овде, пополни ги податоците // овде повторно ја зачувуваме нашата датотека од COM x62 во COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentH = MSWord.Application.Documents.Open(TimeFile); DocumentH.Activate(); MSWord.Application.Selection.Paste(); DocumentH.SaveAs(TimeFile,0); DocumentN.Close(); msword = недефинирано; Исклучок // Ако се појави грешка, се прикажуваат податоците за грешка и објектот е затворен. Info = ErrorInfo(); Општа наменаClientServer.NotifyUser("Грешка - "+Information.Description+" код за грешка - "+Abbr(Information.SourceString)); MSWord.Application.Quit(); Крај на обидот;

Мислам дека се е јасно овде, прво создадовме COM пример со потребната длабочина на бит, направивме празна датотека и ја зачувавме во привремена папка, потоа работи со COM x32, ја пополнува со податоци и на крајот ја копира содржината на целата документ и го зачувува во претходно подготвена датотека.

Сеедно, но само за Excel

TempFile = GetTempFileName ("xls"); Excel = Нов COMObject ("Excel.Application"); Excel.DisplayAlerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.Работни листови(1); BookH.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintControl.PrintFormLayout("Документ.Фактура за опрема."+LayoutName); MSExcel = Layout.Get(); Работна книгаH = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.Работни листови(1); Обидувајќи се со WBook = MSExcel.Application.Workbooks(1); Лист = WBook.WorkSheets(1); Leaf.Activate(); // направи нешто, пополни со податоци од 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookH.Save(); BookN.Close(); Исклучок // Ако се појави грешка, се прикажуваат податоците за грешка и објектот е затворен. Info = ErrorInfo(); Општа наменаClientServer.NotifyUser("Грешка - "+Information.Description+" код за грешка - "+Abbr(Information.SourceString)); MSExcel.Application.Quit(); Крај на обидот;

Еве ти" прво„Стоун што го решив, на x64 сервер со Office x64, сè работи како часовник, нема грешки и нема потреба да се создаваат папки и сè.

Камен " второ„. фрагмент од код

TempFile = GetTempFileName ("xls");

нема многу добро, затоа што пишува во папката: "c:\Users\ what's there ....", општо земено, оваа папка е секогаш на црната листа на сите заштитни ѕидови, антивируси итн итн., барем отворете го Word Security Control Center или Excel. Ајде да погледнеме и таму

треба да се зафркавате со него, инаку постои можност за „чудни“ грешки. Затоа, го предлагам следново:

1. Отворете го Конфигураторот и додајте нов Регистар на информации

овде ќе го складираме нашиот завршен збор, ексел датотекивеќе пополнето, се разбира:

LayoutName - ИД на распоред

Канцелариски документ - Продавница за вредност, тука ја чуваме нашата готова датотека

2. Го додаваме кодот напишан погоре на следниов начин:

MZ =RegistersInformation.TemporaryStorageOffice.CreateRecordManager(); MZ.Object = Избор.Референца; MZ.LayoutName = LayoutName; MZ.Read(); MZ.Object = Избор.Референца; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TempFile)); MZ.Write(); DeleteFiles (TempFile);

Што правиме, ја запишуваме готовата датотека во информативниот регистар и потоа ја бришеме самата привремена датотека, го решаваме проблемот „Word, Excel Security Center“. Останува само едно нешто да се прикаже оваа готова датотека на клиентот (тенок и веб-клиент)

3. Камен“ трето" - пренесување на датотеката на клиентот, еве само ќе го објавам целиот код, зедов нешто од BSP, нешто од демо конфигурацијата "Управувана апликација", нешто од Интернет, но генерално, еве го кодот (целосно )

/////////////////////////////////////////////////////////////////// / /////////////////////////// // УСЛУЖНИ ПОСТАПКИ И ФУНКЦИИ НА BSP &AtServer Функција GetLayout() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName; RecordKey = DataRegisters.Office TemporaryStorage.CreateRecordKey(Нова структура("Object,LayoutName",ObjectReference,LayoutName)); // Адреса = GetNavigationLink (RecordKey,"OfficeDocument"); Адреса за враќање; Крајна функција // Процедура на &OnClient AfterApplicationStart(ReturnCode, ApplicationName) Извоз; // EndProcedure &AtClient Procedure AfterFilesReceived(SubmittedFiles, AdditionalParameters) Извези If NOT SubmittedFiles=Недефинирано Потоа за секој опис од SubmittedFiles Јамка OpAfterApplicationStart = NewAlertDescription("AfterApplicationStart, Description, Thisab); StartApplicationStart(OpAfterApplicationStart, Description.Name); Краен циклус; EndIf; EndProcedure &OnClient Procedure AfterDirSelect(SelectedFiles,CommandName) Извези ако FilesSelected = Недефинирано Потоа Врати; EndIf; Директориум = SelectedFiles; Општа наменаCallServer.SaveWorkingDirectory(Directory); Ако CommandName = "Фактура" Потоа LayoutName = "Фактура" EndIf; DataStructure.Insert("Каталог", Директориум); ConnectWaitingHandler ("Connected_TransferFileToClient",5,True); EndProcedure &OnClient Procedure OpenFilesViaExtension(CommandName) OpAfterCatalog Selection = New AlertDescription("AfterCatalog Selection", ThisObject, CommandName); Директориум = General PurposeCallServer.GetWorkingDirectory(); Ако Директориум = Недефинирано ИЛИ Директориум = "" Потоа Дијалог = NewFileChoiceDialog(FileChoiceDialogMode.CatalogChoice); Dialog.Title = НStr("ru = "Изберете директориум за привремено складирање на датотеки"", "ru"); Dialog.Show(OpAfterCatalog Selection); Друго избрани датотеки = Нова низа; SelectedFiles.Add(Directory); ExecuteAlertProcessing (OpAfterSelectingCatalog, SelectedFiles); EndIf; EndProcedure &OnClient Procedure HandleFileWorkingExtensionConnection(ExtensionConnected,AdditionalParameters) Извези ако е ExtensionConnected Потоа OpenFilesViaExtension(AdditionalParameters.CommandName); EndIf; EndProcedure &AtClient Procedure Connected_PassFileClient() Адреса = GetLayout(); Ако Адреса<>Недефинирано Потоа DisableWaitingHandler("Connected_PassFileClient"); DocumentNumber = DataStructure.DocumentNumber; Директориум = DataStructure.Каталог; LayoutName = DataStructure.LayoutName; PathToFile = Директориум+"\"+Име на распоред+"_#"+Број на документ+".xls"; Опис = Нов опис на датотеката што се пренесува (Пат до датотека, адреса); TransferredFiles = Нова низа; TransferredFiles.Add(Опис); StartReceiveFiles(NewNotificationDescription("AfterReceivedFiles", ThisObject), TransferredFiles, "", False); EndIf; EndProcedure &AtServer Procedure ExecutePrintServer() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ArrayObjects = Нова низа; ArrayObjects.Add(ObjectReference); Documents.InvoiceEquipment.PrintInvoice(ArrayObjects,LayoutName,True); EndProcedure &OnClient Procedure Connected_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connected_ExecutePrintCommand(Command) Референца = Items.List.CurrentData.Reference; DataStructure = Нова структура; DataStructure.Insert("Објект", Врска); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler ("Connected_PerformPrint", 1, Точно); CommandDescription = PrintControlClient.PrintCommandDescription(Command.Name,FormName); StartInstallingFileWorkingExtensions(); StartFileExtensionConnection(New AlertDescription("ProcessFileExtensionConnection",ThisObject,New Structure("CommandName",CommandDescription.Identifier)))); EndProcedure // End StandardSubsystems.Print

Неколку објаснувања:

1. Прво, клиентот работи за нас и преку режимите Thin и Web, така што однапред ги поставуваме следните вредности во својствата на Конфигураторот:

За да избегнете проблеми при работа со прелистувачот

2. Користиме ракувачи за чекање за да избегнеме проблеми со синхронизацијата на повиците (ова важи само за веб-режимот)

3. И, конечно, го поврзуваме Екстензијата за работа со Датотеки (запомнете дека во режимот Thin Client, оваа екстензија е секогаш овозможена). И преку код:

ја пренесуваме датотеката на клиентот користејќи го механизмот NavigationLink, ги добиваме следните пораки во прелистувачот (Slim работи сам по себе):

Па, се чини дека тоа е сè. Се надевам дека ова ќе му помогне на некој...

Што се однесува до Word, Excel датотеките да се вметнат во форма на BinaryData? што е проблемот?

1. Или треба да ги извадиме овие Бинарни податоци од распоредот и да ги пополниме со податоци од 1C и ВНИМАНИЕ повторно да ги напишеме во форма на BinaryData (Vodka With Beer или Beer With Vodka)

2. Или мора да го добиеме распоредот BinaryData на страната на клиентот и да го пополниме таму, НО објектот COM е поддржан само од прелистувачот IE и потоа со танци со поставките ActiveX, другите прелистувачи одамна ја напуштија употребата на ActiveX

Мислам дека секој од програмерите на „седумте“ барем еднаш наишол на таква грешка. Може да се појави или при „спојување на конфигурацијата“ или за време на „ИС тестирање и поправање“.

Но, не сите се обидоа да ја „поправат“ конфигурацијата. Во такви случаи, тие обично или избезумено бараат резервни копии, или (на покомплициран начин) прибегнуваат кон помошта на алатката GComp, која „според легендата“ може да го излечи МД ако едноставно се „расклопи“ и потоа се „склопи“. користејќи ги програмските функции. Навистина, тоа е. Но, не во сите случаи ... Тоа е само таков случај што би сакал да го анализирам во оваа статија.

Значи, првичните податоци:

- "скршена конфигурација";

Алатка MDDiags

- Далекуменаџери приклучок docfileПрелистувач до него. Со овој приклучок, можете да влезете во MD и да работите со неговите објекти.

Бидејќи Конфигураторот дури и одбива да ја прикаже оваа „фатална грешка“, трчаме MDDiagsда го откријат тоа или тие.

Откако ќе ја стартувате алатката, изберете ја саканата конфигурација, а потоа сите стандардни поставки ... стартувајте, анализирајте, добијте го резултатот.

Можеби имате други грешки, но мислам дека ќе можете да се справите со нив кога ќе има заедничко разбирање за тоа како да ја пронајдете грешката и како да ја поправите.

1. Грешка>(\\ весник)

Алатката јасно стави до знаење дека грешката е забележана за 2 објекти "\\Весник \ Весник _ Број 212" и "\\ Весник \ Весник _ Број 860". Сега одете наДалеку и погледнете ги предметите таму.


Овде гледаме многу објекти и една датотека „Container.Contents“. Ги складира дескрипторите на истите овие објекти. По внимателно испитување на содржината на датотеката, разбираме дека нема дескриптори за нашите 2 објекти.

Додадете дескриптори како што е прикажано на сликата.

Проблемот е решен.

2. Грешка DOCUMENT.Invoice (\\Внесете текст\Корисничка помош_број 434\контејнер.содржина)

Се враќаме во МД по посочената патека. Отворање на датотекатаконтејнер. содржина и подетално погледнете ја неговата содржина.

Чудните зборови Cgntainer, Contentq, Prmgram веднаш ви паѓаат во очи. Така е, ова се погрешно напишани идентификатори. Не е тешко да се погоди како треба да биде точно (ако е тешко, одете во следната гранка, отворете ја истата датотека „Container.Contents“ и видете како треба да се напише).

3. ГрешкаДИРЕКТОР.Типични операции(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Отворете ја датотеката на наведената патека и погледнете внимателно... Сите параметри мора да бидат ставени во наводници. Еден од параметрите има „простор“ наместо „наводник“ - поправете го (таква грешка може да се појави кога описот на еден од елементите на објектот (полиња, копчиња, листа на вредности итн.) содржи единечна или двоен цитат, или некој од „специјалните знаци“).

Почнуваме повторно MDDiagsи гледаме дека сите претходни грешки исчезнаа, но се појави друга грешка.

Сега е време да се свртиме кон алатката GComp и да ја провериме „легендата“...

Ја стартуваме алатката, го избираме нашиот скршен (досега) MD и папката каде што треба да ја ставиме конфигурацијата анализирана во објекти, потоа сите стандардни полиња за избор, единственото нешто е да поставите „бришење празни шаблонитабели“ на табулаторот „Општи опции“, кликнете „Декомпајлирај“.

Потоа, без понатамошно одложување, одете во табулаторот „компилација“, поставете го како изворен директориум оној во кој штотуку е анализирана конфигурацијата и наведете ја патеката до новиот MD.

Алатката ќе собере сè безбедно.

Сега ни останува само Далечен менаџерзаменете ја соодветната датотека во „скршената“ DM со истата од „штотуку изградената“ (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Проверете ја конфигурацијата повторно со MDDiags.

Се чини дека се е во ред. Сега одиме до конфигураторот и правиме „тестирање и поправање на безбедноста на информациите“ за да се увериме дека нема повеќе грешки.

Тоа е се. Дозволете ми да се поклонам. И нека Силата е со вас!

П.С. Посебна благодарност до развивачите на комуналните услуги користени во примерот - тие ни помагаат на сите да живееме толку многу ...

Добар ден!. Минатиот пат сфативме како да решиме "Грешка при примена на трансформации. Проверете ја точноста на патеките на наведените трансформации", денес ќе ви кажам за уште една последица поради тоа. Темата на публикацијата ќе биде ситуацијата кога не можете да ја инсталирате платформата 1C и ќе добиете порака: Грешка во Windows: грешка при извршување на функцијата, одлучуваме за минута, сигурен сум дека темата ќе биде корисна за многумина.

Како изгледа грешката при извршувањето?

Како што напишав погоре, тоа се случува на мојот терминален сервер Windows Server 2012 R2 кога се обидувам да ја инсталирам платформата 1C 8.2. По извршувањето на датотеката setup.exe, се појавува прозорецот на волшебникот за инсталација и веднаш дополнителен прозорец со пораката:

Грешка во Windows: грешка при извршување на функцијата

После тоа ќе го добиете следното известување:

Како и во повеќето случаи со платформата 1C, сè е решено со мала поправка во датотеките за конфигурација. Прво, вклучете го приказот на скриените папки, бидејќи датотеката што ни треба не е стандардно видлива. Следно, на уредот C:\, пронајдете ја папката Програмски податоци.

C:\ProgramData\1C\1CESTat\1CESTat.cfg

Датотеката 1CESTat.cfg може да се отвори со која било уредувач на текст, кликнете со десното копче на неа и изберете „Отвори со“, а потоа уредувач погоден за вас.

Најдете го параметарот во датотеката 1CESTat.cfg, треба да го избришете и да ја зачувате датотеката.

Ако ги погледнете дневниците во прегледувачот на настани, тогаш ќе ги видите следните настани.

ИД на настан 1013: Производ: 1C:Enterprise 8.2 (8.2.19.130) -- Грешка во Windows: Грешка при извршување на функцијата.

ИД на настан 11708: Производ: 1C:Enterprise 8.2 (8.2.19.130) -- Инсталациската операција не успеа.

Откако го отстранивме параметарот ADMINISTRATIONFUNC=0, добивме:

ИД на настан 1033: Windows Installer го инсталираше производот. Производ: 1C: Enterprise 8.2 (8.2.19.130). Верзија: 8.2.19.130. Јазик: 1049. Производител: 1C. Монтажата е завршена со статус: 1603.




Врв