Грешка во 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 или Binary Data? Иако ми звучи нешто како да одберам Vodka With Beer или Beer With Vodka :) . Нема голема работа, треба да ги пополните документите со податоци од 1C и да ги пренесете на клиентот.

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

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

MSWord = Layout.Get(); Обидете се со Document = 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. Или препишете го кодот на овој начин

// добијте го името на привремената датотека TimeFile = GetTemporaryFileName("doc"); // овој код дефинитивно ќе повика COM пример со потребната длабочина на бит, во нашиот случај x64 Word = New COMObject("Word.Application"); Збор.Известувачи за прикажување = 0; DocumentN = Word.Application.Documents.Add(); DocumentN.SaveAs(TimeFile,0); Word.Quit(); // тогаш сè е како порано Распоред = Управување со печатење. 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); DocumentN.Activate(); MSWord.Application.Selection.Paste(); DocumentN.SaveAs(TimeFile,0); DocumentN.Close(); MSWord = Недефинирано; Исклучок // Ако се појави грешка, податоците за грешката се печатат и објектот се затвора. Информации = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Грешка - "+Information.Description+" код за грешка - "+Abb.LP(Information.SourceString)); MSWord.Application.Quit(); Краен обид;

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

Сè е исто, но само за Excel

TimeFile = GetTimeFileName ("xls"); Excel = Нов COMObject ("Excel.Application"); Excel.Displayalerts = 0; BookH = Excel.WorkBooks.Add(); SheetN = BookN.Работни листови(1); BookN.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintManagement.PrintFormLayout("Document.Equipment Invoice."+LayoutName); MSExcel = Layout.Get(); BookN = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.Работни листови(1); Обидувајќи се со WBook = MSExcel.Application.Workbooks(1); Лист = WBook.WorkSheets(1); Лист.Активирај(); // правиме нешто, го пополнуваме со податоци од 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); BookN.Save(); BookN.Close(); Исклучок // Ако се појави грешка, податоците за грешката се печатат и објектот се затвора. Информации = ErrorInfo(); GeneralPurposeClientServer.NotifyUser("Грешка - "+Information.Description+" код за грешка - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); Краен обид;

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

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

TimeFile = GetTimeFileName ("xls");

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

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

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

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

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

DocumentOffice - Складирање на вредност, овде ја чуваме нашата готова датотека

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

MH = Регистри на информации.TemporaryStorageOffice.CreateRecordManager(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.Read(); MH.Object = Selection.Link; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Write(); DeleteFiles (TimeFile);

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

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

///////////////////////////////////////////// ///////////////////////// // УСЛУЖНИ ПОСТАПКИ И ФУНКЦИИ BSP &OnServer Функција GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Клуч за запис = Информациски регистри. Привремено канцелариско складирање. CreateRecordKey(Нова структура("Објект,Име на распоред",Објектврска,Име на распоред)); // Адреса = GetNavigationLink (RecordKey,"OfficeDocument"); Адреса за враќање; Крајна функција // Процедура на &OnClient AfterApplicationStart(ReturnCode, ApplicationName) Извоз; // Крај на процедурата &За постапката на клиентот по приемот на датотеки (пренесени датотеки, дополнителни параметри) Извези ако НЕ се пренесени датотеки = Недефинирано Потоа за секој опис на пренесените датотеки Циклус OpAfterAppLaunch = Нов описAlerts("AfterLaunchingApplication. Description", ThisOab ); StartLaunchApplication(OpAfterStartApplication, Description.Name); Краен циклус; крајАко; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Извези ако SelectedFiles = Недефинирано Потоа Врати; крајАко; Директориум = SelectedFiles; GeneralPurposeServerCall.SaveWorkingDirectory(Directory); Ако CommandName = "Фактура" Потоа LayoutName = "Фактура" EndIf; DataStructure.Insert("Директориум", Директориум); ConnectWaitingHandler ("Connectable_SendFileToClient",5,True); Крај на процедурата &За процедурата на клиентот Отворете датотеки преку екстензија (име на команда) OpAfterSelectingDirectory = Нов описAlerts("AfterSelectingDirectory", ThisObject, CommandName); Директориум = GeneralPurposeCallServer.GetWorkingDirectory(); Ако Директориум = Недефинирано ИЛИ Директориум = "" Потоа Дијалог = Нов FileSelectionDialog (FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Избор на директориум за привремено складирање на датотеки"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Во спротивно SelectedFiles = Нова низа; SelectedFiles.Add(Directory); Изведете обработка на предупредувања (OpAfterSelectingDirectory, SelectedFiles); крајАко; Крај на процедурата &За клиентскиот процес Процесот за поврзување на наставките Работат со датотеки (Екстензијата е поврзана, дополнителни параметри) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); крајАко; EndProcedure &OnClient Procedure Connected_PassFileToClient() Адреса = GetLayout(); Ако Адреса<>Недефинирано Потоа DisableWaitHandler ("Connectable_PassFileToClient"); DocumentNumber = DataStructure.DocumentNumber; Директориум = DataStructure.Directory; LayoutName = DataStructure.LayoutName; FilePath = Директориум+"\"+Име на распоред+"_Не"+Број на документ+".xls"; Опис = Нов опис на пренесената датотека (Пат до датотека, адреса); TransferredFiles = Нова низа; TransferredFiles.Add(Опис); StartReceivingFiles (NewDescriptionAlerts ("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); крајАко; Крај на процедурата &На процедурата на серверот ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Нова низа; Низа на објекти.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Object Array,LayoutName,True); EndProcedure &OnClient Procedure Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedure Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = нова структура; DataStructure.Insert("Објект", Врска); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler ("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Започнете со инсталирање на наставката FileWorking(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

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

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

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

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

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

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

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

Во врска со Word, Excel-датотеките вметнати како бинарни податоци? што е проблемот?

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

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

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

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

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

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

Алатка MDDiags

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

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

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

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

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

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


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

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

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

2. Грешка ДОКУМЕНТ.Фактура за прием (\\Внесете текст\Корисничка помош_број 434\Контејнер.Содржина)

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

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

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

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

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

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

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

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

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

Сега ни останува само Далечен менаџерзаменете ја соодветната датотека во „скршената“ MD со истата од „штотуку составената“ (\\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.




Врв