Windows қатесі: функцияны орындау қатесі, бір минутта шешілді. Windows қатесі: функцияны орындау қатесі, бір минутта шешілді Конфигурацияны тексеру қалпына келмейтін қате 1s 7.7

Сонымен, менің мақаламның мәні неде?

1. Сервер бар (x64), бар орнатылған Office 2016 (x64), 1С 8.3.8, сонымен қатар x64 (1С сервері дегенді білдіреді) бар. Пайдаланушылар жұқа клиент және веб-клиент арқылы қосылады.

2. Сату бөлімі шығаратын (дайындайтын) стандартты шарттар мен шот-фактуралардың шоғыры бар. Шрифт, абзац және т.б. бар, әрине, бәрі Word, Excel 2016 (x64) бағдарламасында жасалған, әрине, мұның бәрін 1С-де салуға ниет жоқ, бірақ оны ActiveDocument форматына қоюға тілек бар. макеттер

Шешім банальды болып көрінеді :) , Мен бүкіл механизмді, оның қалай жасалғанын, деректердің 1С-тен ActiveDocument макетіне қалай толтырылғанын сипаттамаймын - менің ойымша, сіз мұны менсіз де жақсы білесіз. Бірақ жұмыс барысында COM нысандары саласында бәрі бірдей тегіс емес екені белгілі болды, атап айтқанда:

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 = Жаңа 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 кеңейтімі бар файлдарды неге кірістіре алмайтыныңызды ойлап көрдіңіз бе?

мұны Тапсырмалар реттеушісі арқылы да тексеруге болады, бірақ шын мәнінде ActiveDocument орналасуы COM данасын (x32) жанама түрде шақырады, сондықтан барлық келесі манипуляциялар осы мүмкіндікті ескере отырып жасалуы керек.

1. Сервер және барлық бағдарламалық құрал x32 болуы керек. Сонда сізге ештеңе істеудің қажеті жоқ (кодты қайта жазу мағынасында)

2. Кодты осылай қайта жазыңыз

// уақытша файлдың атын алу TimeFile = GetTemporaryFileName("doc"); // бұл код міндетті түрде қажетті бит тереңдігінің COM данасын шақырады, біздің жағдайда x64 Word = Жаңа COMObject("Word.Application"); Word.Displayalerts = 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(); 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(); Орналасу = 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("Қате - "+Information.Description+" қате коды - "+Abb.LP(Information.SourceString)); MSExcel.Application.Quit(); EndAttempt;

Міне » бірінші«Мен Office x64 жүйесі бар x64 серверінде бәрі қатесіз жұмыс істейді және қалталар мен басқа нәрселерді жасаудың қажеті жоқ деп шештім.

Тас» екінші". код үзіндісі

TimeFile = GetTimeFileName («xls»);

тамақтану өте жақсы емес, себебі ол қалтаға жазады: «c:\Users\ what's there...», жалпы алғанда, бұл қалта әрқашан барлық желіаралық қалқандардың, антивирустардың және т.б. қара тізімінде болады, т.б. кем дегенде Word немесе Excel бағдарламасында қауіпсіздікті басқару орталығын ашыңыз. Онда да қарайық

Мұнымен айналысуға тура келеді, әйтпесе «біртүрлі» қателер пайда болуы мүмкін. Сондықтан мен келесілерді ұсынамын:

1. Конфигураторды ашыңыз және жаңа ақпарат тізілімін қосыңыз

мұнда біз дайын сөзімізді сақтаймыз, Excel файлдарытолтырылған, әрине:

LayoutName - орналасу идентификаторы

DocumentOffice - Құнды сақтау, мұнда біз дайын файлымызды сақтаймыз

2. Жоғарыдағы кодты келесідей қосамыз:

MH = Information Registers.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 қауіпсіздік орталығы» мәселесін шеше отырып, уақытша файлдың өзін жоямыз. Бұл дайын файлды Клиентке көрсету ғана қалады (жұқа және веб-клиенттер)

3. Тас» үшінші" - файлды клиентке тасымалдау, мұнда мен жай ғана барлық кодты орналастырамын, олардың кейбіреулері BSP-тен, кейбіреулері «Басқарылатын қолданбалардың» демо-конфигурациясынан, кейбіреулері Интернеттен алынған, бірақ жалпы код осында (оның ішінде). толық)

//////////////////////////////////////////////// ///////////////////////// // ҚЫЗМЕТ ПРОЦЕДУРАЛАРЫ МЕН ФУНКЦИЯЛАРЫ BSP &OnServer функциясы GetLayout() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; Жазба кілті = Ақпараттық регистрлер. TemporaryOfficeStorage.Жазба кілтін жасау(Жаңа құрылым("Object,LayoutName",ObjectLink,LayoutName)); // Мекенжай = GetNavigationLink(RecordKey,"OfficeDocument"); Қайтару мекенжайы; EndFunction // &OnClient процедурасы AfterApplicationStart(ReturnCode, ApplicationName) экспорттау; // Процедураның соңы &Файлдарды алғаннан кейін клиенттік процедурада (Тасымалданған файлдар, қосымша параметрлер) Экспорттау Егер тасымалданбаса Файлдар = Анықталмаған Содан кейін жіберілген файлдар циклінің әрбір сипаттамасы үшін OpAfterAppLaunch = Жаңа DescriptionAlerts("AfterLaunchingApplication", ThisObject Description. ); StartLaunchApplication(OpAfterStartApplication, Сипаттама.Аты); EndCycle; endIf; EndProcedure &OnClient Procedure AfterDirectorySelection(SelectedFiles, CommandName) Экспорттау Егер SelectedFiles = Анықталмаған болса, содан кейін қайтарыңыз; endIf; Каталог = SelectedFiles; GeneralPurposeServerCall.SaveWorkingDirectory(Каталог); Егер CommandName = "Шот-фактура" болса, LayoutName = "Шот-фактура" EndIf; DataStructure.Insert("Каталог", Каталог); ConnectWaitingHandler("Connectable_SendFileToClient",5, True); Процедураның соңы &Клиент процедурасында Кеңейтім арқылы файлдарды ашыңыз (пәрмен атауы) OpAfterSelectingDirectory = Жаңа DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Каталог = GeneralPurposeCallServer.GetWorkingDirectory(); Каталог = Анықталмаған НЕМЕСЕ Каталог = "" Егер Диалог = Жаңа FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Файлдарды уақытша сақтау үшін каталогты таңдау"", "ru"); Dialog.Show(OpAfterSelectingDirectory); Әйтпесе SelectedFiles = Жаңа массив; SelectedFiles.Add(Каталог); Ескертуді өңдеуді орындау(OpAfterSelectingDirectory, SelectedFiles); endIf; Процедураның соңы &Клиенттік процедура процесіндеConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); endIf; EndProcedure &OnClient процедурасы 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, "", False); endIf; Процедураның соңы &Сервердегі процедурада ExecutePrintServer() ObjectLink = DataStructure.Object; LayoutName = DataStructure.LayoutName; DataStructure.Insert("DocumentNumber", ObjectReference.Number); ObjectArray = Жаңа массив; Objects массиві.Add(ObjectRef); Documents.Equipment Invoice.PrintInvoice(Нысан массиві, МакетАты, True); EndProcedure &OnClient процедурасы Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient процедурасы Connectable_ExecutePrintCommand(Command) Link = Elements.List.CurrentData.Link; DataStructure = newStructure; DataStructure.Insert("Объект", Сілтеме); DataStructure.Insert("LayoutName", "Шот-фактура"); ConnectWaitingHandler("Connectable_Print", 1, True); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); FileWorking Extension() орнатуды бастау; StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // End StandardSubsystems.Print

Бірнеше түсініктеме:

1. Біріншіден, біздің клиент жұқа және веб режимдері арқылы жұмыс істейді, сондықтан Конфигуратор сипаттарында алдын ала келесі мәндерді орнатамыз:

Браузермен жұмыс істеу кезінде проблемаларды болдырмау үшін

2. Қоңырауларды синхрондау мәселелерін болдырмау үшін күту өңдегіштерін қолданамыз (бұл тек веб режиміне қатысты)

3. Соңында, Файлдармен жұмыс істеу үшін кеңейтімді қосыңыз (Жіңішке клиент режимінде бұл кеңейтім әрқашан қосулы екенін есте сақтаңыз). Және код арқылы:

біз файлды Клиентке NavigationLink механизмі арқылы тасымалдаймыз, біз браузерде келесі хабарламаларды аламыз (Thin өздігінен жұмыс істейді):

Жарайды, бәрі осы сияқты. Бұл біреуге көмектеседі деп үміттенемін ...

Word бағдарламасына қатысты Excel файлдары екілік деректер ретінде енгізілген бе? мәселе неде?

1. Біз осы Екілік деректерді макеттен шығарып алып, оны 1С деректерімен толтыруымыз керек және НАЗАР АУДАРЫҢЫЗ оны Бинарлы деректер түрінде қайтадан жазып алыңыз (Сыра қосылған арақ немесе Арақпен сыра)

2. Немесе біз Клиент жағында BinaryData макетін алуымыз керек және оны толтыруымыз керек, БІРАҚ COM объектісіне тек IE браузері қолдау көрсетеді, содан кейін ActiveX параметрлері бар билермен басқа браузерлер ActiveX пайдаланудан ұзақ уақыт бас тартты.

Менің ойымша, «жеті» бағдарламашының әрқайсысы кем дегенде бір рет осындай қатеге тап болды. Ол «конфигурацияларды біріктіру» кезінде немесе «ақпараттық қауіпсіздікті тексеру және бекіту» кезінде пайда болуы мүмкін.

Бірақ бәрі бірдей конфигурацияны «түзетуге» тырыспады. Мұндай жағдайларда олар әдетте сақтық көшірмелерді іздейді немесе (күрделі әдіс) GComp утилитасының көмегіне жүгінеді, ол «аңыз бойынша» MD-ны жай ғана «бөлшектеп», содан кейін «жинақтау» арқылы емдей алады. бағдарламаның функциялары. Расында да солай. Бірақ барлық жағдайда емес... Мен осы мақалада дәл осы жағдайды қарастырғым келеді.

Сонымен, бастапқы деректер:

- «бұзылған конфигурация»;

Утилита MDDiags

- АлысМенеджержәне плагин DocFileБраузер оған. Бұл плагинді пайдалана отырып, сіз MD ішіне кіріп, оның объектілерімен жұмыс жасай аласыз.

Конфигуратор тіпті бұл «түзетілмейтін қатені» көрсетуден бас тартқандықтан, біз іске қосыламыз MDDiagsоны немесе оларды анықтау.

Утилитаны іске қосқаннан кейін қажетті конфигурацияны таңдаңыз, содан кейін барлық әдепкі параметрлер ... іске қосыңыз, талдау жасаңыз, нәтиже алыңыз.

Сізде басқа да қателер болуы мүмкін, бірақ қатені қалай табуға және оны қалай түзетуге болатынын жалпы түсінгеннен кейін сіз оларды анықтай аласыз деп ойлаймын.

1. Қате>(\\Журнал)

Утилита қате 2 нысан үшін байқалғанын түсіндірді «\\ Journal\Journal_Number 212" және "\\Journal\Journal_Number 860". Енді барайықАлыс және ондағы нысандарға қараңыз.


Біз мұнда көптеген нысандарды және бір файлды «Container.Contents» көреміз. Ол дәл осы объектілердің дескрипторларын сақтайды. Файлдың мазмұнын мұқият зерттегеннен кейін біз 2 нысан үшін дескрипторлар жоқ екенін түсінеміз.

Суретте көрсетілгендей дескрипторларды қосыңыз.

Мәселе шешілді.

2. Қате DOCUMENT.Түбіртек шот (\\TypedText\UserHelp_№434\Контейнер.Мазмұны)

Біз көрсетілген жол бойынша қайтадан MD-ге барамыз. Файлды ашыңыз"Контейнер. Мазмұны « және оның мазмұнына мұқият қараңыз.

Cgntainer, Contentq, Prmgram деген оғаш сөздер көзіңізге бірден түседі. Дұрыс, бұл қате жазылған идентификаторлар. Оның қалай дұрыс болатынын болжау қиын емес (егер бұл қиын болса, келесі бөлімге өтіңіз, сол «Container.Contents» файлын ашыңыз және оның қалай жазылу керектігін қараңыз).

3. ҚатеАНЫҚТАМА.Типтік операциялар(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Файлды көрсетілген жолда ашып, мұқият қараңыз... Барлық параметрлер тырнақшаға алынуы керек. Параметрлердің бірінде «тырнақшаның» орнына «бос орын» бар - біз оны түзетеміз (бұл қате объектінің элементтерінің біреуінің сипаттамасында (өріс, түймешік, мәндер тізімі және т.б.) жалғыз болған кезде орын алуы мүмкін. немесе қос тырнақша, немесе кез келген «арнайы таңбалар»).

Қайтадан іске қосайық MDDiagsжәне біз алдыңғы қателердің барлығы жойылғанын көреміз, бірақ басқа қате пайда болды.

Енді GComp утилитасына жүгініп, «мағынаны» тексеру уақыты келді...

Біз утилитаны іске қосамыз, бұзылған (әзірше) MD-ны және нысандар бойынша сұрыпталған конфигурацияны қою керек қалтаны таңдаймыз, содан кейін барлық құсбелгілер әдепкі бойынша болады, жалғыз нәрсе - «жою» құсбелгісін қою. бос үлгілеркестелер» «Жалпы параметрлер» қойындысында «Декомпиляция» түймесін басыңыз.

Содан кейін, көп ұзамай, «құрастыру» қойындысына өтіңіз, бастапқы каталогты конфигурацияны талдаған каталогқа орнатыңыз және жаңа MD жолын көрсетіңіз.

Утилита барлығын қауіпсіз жинайды.

Енді бізге керек Алыс менеджер«сынған» MD ішіндегі сәйкес файлды «жаңа жиналған» файлмен бірдеймен ауыстырыңыз (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Қолдану арқылы конфигурацияны қайтадан тексереміз MDDiags.

Бәрі жақсы сияқты. Енді біз конфигураторға кіріп, қателердің жоқтығына көз жеткізу үшін «ақпараттық қауіпсіздікті тексеру және түзетуді» жасаймыз.

Бар болғаны. Маған демалыс алуға рұқсат етіңіз. Күш сенімен бірге болсын!)

P.S. Мысалда пайдаланылған утилиталарды әзірлеушілерге ерекше рахмет - олар бәрімізге өмір сүруге көмектеседі...

Қайырлы күн!. Өткен жолы біз "Түрлендірулерді қолдану қатесі. Көрсетілген түрлендірулер жолдарының дұрыстығын тексеру" шешімін қарастырдық, бүгін мен оған байланысты тағы бір салдар туралы айтып беремін. Жарияланымның тақырыбы 1С платформасын орната алмаған кездегі жағдай болады және сіз хабарлама аласыз: Windows қатесі: функцияны орындау қатесі, біз оны бір минутта шешеміз, тақырып көптеген адамдар үшін пайдалы болатынына сенімдімін.

Функцияны орындау қатесі неге ұқсайды?

Жоғарыда жазғанымдай, мен 1С 8.2 платформасын орнатуға тырысқанда Windows Server 2012 R2 терминал серверінде бұл мәселе туындайды. setup.exe файлын іске қосқаннан кейін орнату шеберінің терезесі және бірден хабарламасы бар қосымша терезе пайда болады:

Windows қатесі: функцияны орындау қатесі

Ол үшін сіз осы хабарламаны аласыз:

1С платформасында көп жағдайда болғандай, барлығын конфигурация файлдарындағы шағын түзету арқылы шешуге болады. Алдымен, жасырын қалталарды көрсетуді қосыңыз, себебі бізге қажет файл әдепкі бойынша көрінбейді. Содан кейін, 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. Өндіруші: 1С. Орнату күйімен аяқталды: 1603.




Жоғарғы