Възникна непоправима грешка на сървъра 1c enterprise. Грешка в Windows: грешка при изпълнение на функция, решаваме за минута

Възникна непоправима грешка на сървъра 1c enterprise.  Грешка в Windows: грешка при изпълнение на функция, решаваме за минута
Възникна непоправима грешка на сървъра 1c enterprise. Грешка в Windows: грешка при изпълнение на функция, решаваме за минута

Мисля, че всеки от програмистите на "седемте" поне веднъж е срещнал такава грешка. Може да възникне или по време на „сливане на конфигурация“, или по време на „тестване и коригиране на IS“.

Но не всеки се опита да "поправи" конфигурацията. В такива случаи те обикновено или трескаво търсят резервни копия, или (по по-сложен начин) прибягват до помощта на помощната програма GComp, която "според легендата" може да излекува MD, ако просто бъде "разглобена" и след това "сглобена" използване на функциите на програмата. Наистина е така. Но не във всички случаи ... Това е точно такъв случай, който бих искал да анализирам в тази статия.

И така, първоначалните данни:

- "развалена конфигурация";

полезност MDDiags

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

Тъй като конфигураторът дори отказва да покаже тази "фатална грешка", стартираме MDDiagsда ги откриете.

След като стартирате помощната програма, изберете желаната конфигурация, след това всички настройки по подразбиране ... стартирайте, анализирайте, получете резултата.

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

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

Помощната програма изясни, че грешката се наблюдава за 2 обекта "\\Журнал \ Журнал _ Номер 212" и "\\ Журнал \ Журнал _ Номер 860". Сега отидете наДалеч и погледнете предметите там.


Тук виждаме много обекти и един файл "Container.Contents". Той съхранява дескрипторите на същите тези обекти. След като внимателно проучихме съдържанието на файла, разбираме, че няма дескриптори за нашите 2 обекта.

Добавете дескриптори, както е показано на фигурата.

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

2. Грешка DOCUMENT.Invoice (\\Въведен текст\UserHelp_номер434\контейнер.съдържание)

Връщаме се в MD по указаната пътека. Отваряне на файлаконтейнер. съдържание и разгледайте по-отблизо съдържанието му.

Странните думи Cgtainer, Contentq, Prmgram веднага привличат вниманието ви. Точно така, това са неправилно изписани идентификатори. Не е трудно да познаете как трябва да бъде правилно (ако е трудно, отидете на следващия клон, отворете същия файл "Container.Contents" и вижте как трябва да бъде написан).

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

Отворете файла на посочения път и погледнете внимателно... Всички параметри трябва да бъдат поставени в кавички. Един от параметрите има "интервал" вместо "кавичка" - коригирайте го (тази грешка може да възникне, когато описанието на един от елементите на обекта (полета, бутони, списък със стойности и т.н.) съдържа единичен или двоен цитат или някои от „специални символи“).

Започваме отново MDDiagsи виждаме, че всички предишни грешки са изчезнали, но се е появила друга грешка.

Сега е време да се обърнете към помощната програма GComp и да проверите "легендата"...

Стартираме помощната програма, избираме нашия счупен (засега) MD и папката, в която трябва да поставим конфигурацията, анализирана на обекти, след това всички квадратчета за отметка по подразбиране, единственото нещо е да зададем „изтриване празни шаблонитаблици" в раздела "Общи опции", щракнете върху "Декомпилиране".

След това, без повече приказки, отидете в раздела "компилация", задайте като изходна директория тази, в която конфигурацията току-що е анализирана, и посочете пътя до новия MD.

Помощната програма ще събере всичко безопасно.

Сега трябва само да използваме Far Manager, за да заменим съответния файл в "счупения" MD със същия от "току-що изградения" (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

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

Изглежда всичко е наред. Сега отиваме в конфигуратора и правим „тестване и коригиране на информационната сигурност“, за да сме сигурни, че няма повече грешки.

Това е всичко. Позволи ми да се поклоня. И нека Силата бъде с вас!

P.S. Специални благодарности на разработчиците на помощните програми, използвани в примера - те ни помагат да живеем толкова много...

Добър ден!. Последният път разбрахме как да разрешим "Грешка при прилагане на трансформации. Проверете коректността на пътищата на посочените трансформации", днес ще ви разкажа за още едно следствие от това. Темата на публикацията ще бъде ситуацията, когато не можете да инсталирате платформата 1C и ще получите съобщение: грешка на windows: грешка при изпълнение на функцията, решаваме след минута, сигурна съм, че темата ще е полезна за мнозина.

Как изглежда грешката при изпълнение?

Както писах по-горе, това се случва на моя Windows Server 2012 R2 терминален сървър, когато се опитам да инсталирам платформата 1C 8.2. След стартиране на файла setup.exe се появява прозорецът на съветника за инсталиране и веднага допълнителен прозорец със съобщението:

Грешка в Windows: грешка при изпълнение на функция

След което ще получите следното известие:

Както в повечето случаи с платформата 1C, всичко се решава с малка корекция в конфигурационните файлове. Първо, включете показването на скрити папки, тъй като файлът, от който се нуждаем, не се вижда по подразбиране. След това на устройството C:\ намерете папката ProgramData.

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, получихме:

ID на събитие 1033: Windows Installerзавърши инсталирането на продукта. Продукт: 1C:Enterprise 8.2 (8.2.19.130). Версия: 8.2.19.130. Език: 1049. Производител: 1C. Инсталацията е завършена със статус: 1603.

И така, какъв е смисълът на моята статия?

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); Документ.Активиране(); //След това по някакъв начин вземете данните и попълнете документа на Word //Вземете пътя във временната директория, за да запишете файла там TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NameTime); //камъкът започва тук MyDocumentInBinaryData = New BinaryData(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

това може да се провери и през диспечера на задачите, но факт е, че оформлението на ActiveDocument имплицитно извиква екземпляр на COM (x32) и следователно всички по-нататъшни манипулации трябва да се извършват, като се вземе предвид тази функция.

1. Сървърът и целият софтуер трябва да са x32. Тогава не е нужно да правите нищо (в смисъл да пренапишете кода)

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

// получаваме името на временния файл TempFile = GetTemporaryFileName("doc"); // този код точно ще извика COM екземпляр с необходимата битовост, в нашия случай x64 Word = New COMObject("Word.Application"); word.displayalerts = 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); Документ.Активиране(); // направете нещо тук, попълнете данните // тук запазваме отново нашия файл от 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 = недефиниран; Изключение // Ако възникне грешка, данните за грешка се показват и обектът се затваря. Информация = Информация за грешка(); General PurposeClientServer.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.WorkSheets(1); BookH.SaveAs(TimeFile, -4143); Excel.Quit(); Layout = PrintControl.PrintFormLayout("Документ.Фактура за оборудване."+LayoutName); MSExcel = Layout.Get(); Работна книгаH = MSExcel.Application.Workbooks.Open(TimeFile); SheetN = BookN.WorkSheets(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(); Изключение // Ако възникне грешка, данните за грешка се показват и обектът се затваря. Информация = Информация за грешка(); General PurposeClientServer.NotifyUser("Грешка - "+Information.Description+" код на грешка - "+Abbr(Information.SourceString)); MSExcel.Application.Quit(); Край на опита;

Ето " първи„Stone реших, на x64 сървър с Office x64, всичко работи като часовник, няма грешки и няма нужда да създавате папки и всичко.

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

TempFile = GetTempFileName("xls");

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

трябва да се занимавате с него, в противен случай има възможност за "странни" грешки. Затова предлагам следното:

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

тук ще съхраняваме нашето готово Слово, excel файловевече е попълнено, разбира се:

LayoutName - ИД на оформление

Office Document - Value Store, това е мястото, където съхраняваме нашите готов файл

2. Добавяме кода, написан по-горе, както следва:

MZ =RegistersInformation.TemporaryStorageOffice.CreateRecordManager(); MZ.Object = Selection.Reference; MZ.LayoutName = LayoutName; MZ.Read(); MZ.Object = Selection.Reference; MZ.LayoutName = LayoutName; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TempFile)); MZ.Write(); Изтриване на файлове (временен файл);

Какво правим, записваме готовия файл в информационния регистър и след това изтриваме самия временен файл, решаваме проблема "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"); Адрес за връщане; EndFunction // &OnClient Процедура AfterApplicationStart(ReturnCode, ApplicationName) Export; // Процедура EndProcedure &AtClient AfterFilesReceived(SubmittedFiles, AdditionalParameters) Export If NOT SubmittedFiles=Undefined Тогава за всяко описание от SubmittedFiles Loop OpAfterApplicationStart = NewAlertDescription("AfterApplicationStart", ThisObject, Description.Name); StartApplicationStart(OpAfterApplicationStart, Description.Name); EndCycle; EndIf; EndProcedure &OnClient Процедура AfterDirSelect(SelectedFiles,CommandName) Export If FilesSelected = Undefined Then Return; EndIf; Директория = Избрани файлове; Общо предназначениеCallServer.SaveWorkingDirectory(Директория); If CommandName = "Invoice" Then LayoutName = "Invoice" EndIf; DataStructure.Insert("Каталог", Директория); ConnectWaitingHandler("Connected_TransferFileToClient",5,True); EndProcedure &OnClient Процедура OpenFilesViaExtension(CommandName) OpAfterCatalog Selection = New AlertDescription("AfterCatalog Selection", ThisObject, CommandName); Директория = General PurposeCallServer.GetWorkingDirectory(); If Directory = Undefined OR Directory = "" Then Dialog = NewFileChoiceDialog(FileChoiceDialogMode.CatalogChoice); Dialog.Title = НStr("ru = "Изберете директория за временно съхранение на файлове"", "ru"); Dialog.Show(OpAfterCatalog Selection); Else SelectedFiles = Нов масив; SelectedFiles.Add(Directory); ExecuteAlertProcessing(OpAfterSelectingCatalog, SelectedFiles); EndIf; EndProcedure &OnClient Процедура HandleFileWorkingExtensionConnection(ExtensionConnected,AdditionalParameters) Export If ExtensionConnected Then OpenFilesViaExtension(AdditionalParameters.CommandName); EndIf; EndProcedure &AtClient Процедура Connected_PassFileClient() Адрес = GetLayout(); Ако адрес<>Undefined Then DisableWaitingHandler("Connected_PassFileClient"); Номер на документ = Структура на данни.Номер на документ; Директория = DataStructure.Catalog; LayoutName = DataStructure.LayoutName; PathToFile = Directory+"\"+LayoutName+"_#"+DocumentNumber+.xls"; Описание = Ново описание на файла, който се прехвърля (път към файла, адрес); TransferredFiles = Нов масив; TransferredFiles.Add(Description); StartReceiveFiles(NewNotificationDescription("AfterReceivedFiles", ThisObject), TransferredFiles, "", False); EndIf; EndProcedure &AtServer Процедура ExecutePrintServer() ObjectReference = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("Номер на документ", ObjectReference.Number); ArrayObjects = Нов масив; ArrayObjects.Add(ObjectReference); Documents.InvoiceEquipment.PrintInvoice(ArrayObjects,LayoutName,True); EndProcedure &OnClient Процедура Connected_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Процедура Connected_ExecutePrintCommand(Command) Reference = Items.List.CurrentData.Reference; DataStructure = Нова структура; DataStructure.Insert("Object", Link); DataStructure.Insert("LayoutName", "Invoice"); ConnectWaitingHandler("Connected_PerformPrint", 1, True); CommandDescription = PrintControlClient.PrintCommandDescription(Command.Name,FormName); Стартиране на инсталиране на файлови работни разширения (); StartFileExtensionConnection(New AlertDescription("ProcessFileExtensionConnection",ThisObject,New Structure("CommandName",CommandDescription.Identifier)))); EndProcedure // End StandardSubsystems.Print

Няколко пояснения:

1. Първо, клиентът работи за нас както чрез тънки, така и чрез уеб режими, така че предварително задаваме следните стойности в свойствата на конфигуратора:

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

2. Използваме манипулатори на изчакване, за да избегнем проблеми със синхронизирането на повикванията (това се отнася само за уеб режим)

3. И накрая, свързваме разширението за работа с файлове (не забравяйте, че в режим на тънък клиент това разширение винаги е активирано). И чрез код:

прехвърлим файла на клиента чрез механизма NavigationLink, получаваме следните съобщения в браузъра (Slim работи сам):

Е, това изглежда е всичко. Надявам се това да помогне на някого...

Относно Word, Excel файлове за вмъкване под формата на BinaryData? какъв е проблемът?

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

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