Error de Windows: error de ejecución de función, solucionado en un minuto. Error de Windows: error de ejecución de función, solucionado en un minuto Comprobación de configuración error irrecuperable 1s 7.7

Entonces, ¿cuál es el objetivo de mi artículo?

1. Hay un servidor (x64), con oficina instalada 2016 (x64), hay 1C 8.3.8 también x64 (es decir, servidor 1C). Los usuarios se conectan a través de un cliente ligero y un cliente web.

2. Hay una serie de contratos y facturas estándar emitidos (preparados) por el departamento de ventas. Hay una fuente, un párrafo, etc., por supuesto, todo está diseñado en Word, Excel 2016 (x64), naturalmente, no hay ganas de dibujar todo esto en 1C, pero sí de ponerlo en formato ActiveDocument. diseños

La solución parece banal :) , No describiré todo el mecanismo, cómo se hace, cómo se completan los datos de 1C en el diseño de ActiveDocument; creo que lo sabes perfectamente sin mí. Pero durante el trabajo resultó que no todo es tan sencillo en el ámbito de los objetos COM, a saber:

2. ¿Qué opción es mejor elegir: ActiveDocument o Binary Data? Aunque a mí me suena algo así como elegir Vodka Con Cerveza o Cerveza Con Vodka :) . No es gran cosa, debe completar los documentos con datos de 1C y transferirlos al Cliente.

Bueno, está bien, saltémonos la letra, elijo ActiveDocument, no describiré el algoritmo completo, solo enumeraré los errores y su solución. Todo lo que se indica a continuación es mi especulación personal y de ninguna manera pretende ser la verdad última. Es posible que haya resuelto estos problemas o los haya resuelto de manera diferente.

1. Piedra " primero". El método SaveAs no funciona (tanto para MSWord como para MSExcel). Al intentar escribir datos binarios, 1C simplemente falla. Mire el fragmento de lista:

MSWord = Diseño.Get(); Pruebe Documento = MSWord.Application.Documents(1); Documento.Activar(); //A continuación, de alguna manera obtenemos los datos y completamos el documento de Word //Obtenemos la ruta en el directorio temporal para guardar el archivo allí TimeName = GetTemporaryFileName(".docx"); Document.SaveAs(NombreHora); //la piedra comienza aquí MyDocumentInBinaryData = New BinaryData(NameTime); //bueno, aquí esta piedra es eliminada por 1C :) MSWord.Application.Quit();

Muchas gracias.

Creando carpetas
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop
El problema fue resuelto. Tema cerrado.

¿Cuál es la razón? La razón es que el código

MSWord = Diseño.Get();

Siempre llama a una instancia de un objeto COM (x32) independientemente del bitness que esté instalado Office. ¿Alguna vez te has preguntado por qué no puedes insertar archivos con la extensión docx, xlsx en el diseño de ActoveDocument?

Esto también se puede comprobar a través del Administrador de tareas, pero el hecho es que el diseño de ActiveDocument llama implícitamente a una instancia COM (x32) y, por lo tanto, todas las manipulaciones posteriores deben realizarse teniendo en cuenta esta característica.

1. El servidor y todo el software deben ser x32. Entonces no necesitas hacer nada (en el sentido de reescribir el código)

2. O reescribe el código de esta manera

// obtiene el nombre del archivo temporal TimeFile = GetTemporaryFileName("doc"); // este código definitivamente llamará a una instancia COM de la profundidad de bits requerida, en nuestro caso x64 Word = New COMObject("Word.Application"); Word.Displayalerts = 0; DocumentoN = Word.Aplicación.Documentos.Agregar(); DocumentoN.Guardar como(TimeFile,0); Palabra.Salir(); // entonces todo es como antes Diseño = Gestión de impresión Impresión del diseño del formulario ("Documento. Ley de transferencia de equipo". + Nombre del diseño); MSWord = Diseño.Get(); Pruebe Documento = MSWord.Application.Documents(1); Documento.Activar(); // aquí hacemos algo, completamos los datos // aquí volveremos a guardar nuestro archivo de COM x62 a COM x64 MSWord.Application.Selection.WholeStory(); MSWord.Application.Selection.Copy(); DocumentoN = MSWord.Application.Documents.Open(TimeFile); DocumentoH.Activate(); MSWord.Application.Selection.Paste(); DocumentoN.Guardar como(TimeFile,0); DocumentoN.Close(); MSWord = Indefinido; Excepción // Si ocurre un error, los datos del error se imprimen y el objeto se cierra. Información = InformaciónError(); GeneralPurposeClientServer.NotifyUser("Error - "+Información.Descripción+" código de error - "+Abb.LP(Información.SourceString)); MSWord.Application.Quit(); intento final;

Creo que aquí todo está claro, primero creamos una instancia COM de la profundidad de bits requerida, creamos un archivo vacío y lo guardamos en una carpeta temporal, luego trabajamos con COM x32, lo llenamos con datos y finalmente copiamos el contenido de todo documento y guárdelo en un archivo previamente preparado.

Todo es igual, pero solo para Excel.

ArchivoHora = GetTimeFileName("xls"); Excel = Nuevo COMObject("Excel.Application"); Excel.Displayalerts = 0; LibroH = Excel.WorkBooks.Add(); HojaN = LibroN.WorkSheets(1); LibroN.Guardar como(TimeFile, -4143); Excel.Salir(); Diseño = PrintManagement.PrintFormLayout("Documento.Factura de equipo."+NombreDeDiseño); MSExcel = Diseño.Get(); LibroN = MSExcel.Application.Workbooks.Open(TimeFile); HojaN = LibroN.WorkSheets(1); Probando WBook = MSExcel.Application.Workbooks(1); Hoja = WBook.WorkSheets(1); Hoja.Activar(); // hacemos algo, lo llenamos con datos de 1C MSExcel.Application.WorkBooks(1).WorkSheets(1).Cells.Copy(SheetN.Cells); LibroN.Guardar(); LibroN.Cerrar(); Excepción // Si ocurre un error, los datos del error se imprimen y el objeto se cierra. Información = InformaciónError(); GeneralPurposeClientServer.NotifyUser("Error - "+Información.Descripción+" código de error - "+Abb.LP(Información.SourceString)); MSExcel.Application.Quit(); intento final;

Aquí tienes " primero“Me decidí por la piedra, en un servidor x64 con Office x64, todo funciona exactamente como un reloj, sin errores y no hay necesidad de crear carpetas ni nada más.

Piedra " segundo". fragmento de código

ArchivoHora = GetTimeFileName("xls");

comer no es muy bueno, porque escribe en la carpeta: “c:\Users\ what's there...”, en general, esta carpeta siempre está en la lista negra de todos los firewalls, antivirus, etc., etc., en Al menos abra el centro de control de seguridad en Word o Excel. miremos ahí también

Tendrá que retocar esto, de lo contrario existe la posibilidad de que aparezcan errores "extraños". Por ello sugiero lo siguiente:

1. Abra el Configurador y agregue un nuevo Registro de Información

aquí almacenaremos nuestra Palabra terminada, archivos excel ya rellenado, por supuesto:

Nombre del diseño: ID del diseño

DocumentOffice - Almacenamiento de valor, aquí guardamos nuestro archivo terminado

2. Agregamos el código anterior de la siguiente manera:

MH = Registros de información.TemporaryStorageOffice.CreateRecordManager(); MH.Objeto = Selección.Enlace; MZ.LayoutName = Nombre del diseño; MZ.Leer(); MH.Objeto = Selección.Enlace; MZ.LayoutName = Nombre del diseño; MZ.DocumentOffice = NewValueStorage(NewBinaryData(TimeFile)); MZ.Escribir(); Eliminar archivos (archivo de tiempo);

Lo que hacemos es escribir el archivo terminado en el registro de información y luego eliminar el archivo temporal, resolviendo el problema de "Word, Excel Security Center". Todo lo que queda es mostrar este archivo terminado al Cliente (clientes ligeros y web)

3. Piedra " tercero" - transfiriendo un archivo al cliente, aquí simplemente publicaré todo el código, algunos tomados del BSP, algunos de la configuración de demostración de la “Aplicación administrada”, algunos de Internet, pero en general aquí está el código (en su totalidad)

///////////////////////////////////////////////// // ////////////////////////// // PROCEDIMIENTOS Y FUNCIONES DE SERVICIO BSP &OnServer Función GetLayout() ObjectLink = DataStructure.Object; NombreDeDiseño = EstructuraDeDatos.NombreDeDiseño; Clave de registro = Registros de información. TemporaryOfficeStorage. CreateRecordKey(New Structure("Object,LayoutName",ObjectLink,LayoutName)); // Dirección = GetNavigationLink(RecordKey,"OfficeDocument"); Dirección del remitente; EndFunction // &Procedimiento OnClient AfterApplicationStart(ReturnCode, ApplicationName) Exportar; // Fin del procedimiento y en el procedimiento del cliente después de recibir archivos (archivos transferidos, parámetros adicionales) Exportar si NO se transmiten archivos = Indefinido Entonces para cada descripción del ciclo de archivos transmitidos OpAfterAppLaunch = New DescriptionAlerts("AfterLaunchingApplication", ThisObject, Description.Name ); StartLaunchApplication(OpAfterStartApplication, Descripción.Nombre); Fin del ciclo; terminara si; EndProcedure &OnClient Procedimiento AfterDirectorySelection(SelectedFiles, CommandName) Exportar si SelectedFiles = Indefinido Luego regresar; terminara si; Directorio = Archivos seleccionados; GeneralPurposeServerCall.SaveWorkingDirectory(Directorio); Si CommandName = "Factura" Then LayoutName = "Factura" EndIf; DataStructure.Insert("Directorio", Directorio); ConnectWaitingHandler("Connectable_SendFileToClient",5,True); Fin del procedimiento &En el procedimiento del cliente Abrir archivos a través de la extensión (nombre del comando) OpAfterSelectingDirectory = New DescriptionAlerts("AfterSelectingDirectory", ThisObject, CommandName); Directorio = GeneralPurposeCallServer.GetWorkingDirectory(); Si Directorio = Indefinido O Directorio = "" Entonces Diálogo = New FileSelectionDialog(FileSelectionDialogMode.DirectorySelection); Dialog.Header = НStr("ru = "Seleccionar un directorio para el almacenamiento temporal de archivos"", "ru"); Dialog.Show(OpAfterSelectingDirectory); De lo contrario, Archivos seleccionados = Nueva matriz; Archivos seleccionados.Agregar (Directorio); Realizar procesamiento de alertas (OpAfterSelectingDirectory, SelectedFiles); terminara si; Fin del procedimiento y en el proceso de procedimiento del cliente ConnectingExtensionsWorkingWithFiles(ExtensionConnected,AdditionalParameters) ExportIfExtensionConnectedThenOpenFilesThroughExtension(AdditionalParameters.CommandName); terminara si; EndProcedure &OnClient Procedimiento Connected_PassFileToClient() Dirección = GetLayout(); Si dirección<>Indefinido Entonces DisableWaitHandler("Connectable_PassFileToClient"); NúmeroDocumento = EstructuraDatos.NúmeroDocumento; Directorio = Estructura de datos.Directorio; NombreDeDiseño = EstructuraDeDatos.NombreDeDiseño; RutaArchivo = Directorio+"\"+NombreDiseño+"_No"+NúmeroDocumento+".xls"; Descripción = Nueva descripción del archivo transmitido (ruta al archivo, dirección); TransferredFiles = Nueva matriz; TransferredFiles.Add(Descripción); StartReceivingFiles(NewDescriptionAlerts("AfterReceivingFiles", ThisObject), TransferredFiles, "", False); terminara si; Fin del procedimiento &En el procedimiento del servidor ExecutePrintServer() ObjectLink = DataStructure.Object; NombreDeDiseño = EstructuraDeDatos.NombreDeDiseño; DataStructure.Insert ("Número de documento", Referencia de objeto.Número); ObjectArray = Nueva matriz; Matriz de objetos.Add(ObjectRef); Documentos.Factura de equipo.ImprimirFactura(Matriz de objetos,Nombre del diseño,Verdadero); EndProcedure &OnClient Procedimiento Connectable_ExecutePrint() ExecutePrintServer(); EndProcedure // StandardSubsystems.Print &OnClient Procedimiento Connectable_ExecutePrintCommand(Command) Enlace = Elements.List.CurrentData.Link; Estructura de datos = nuevaEstructura; DataStructure.Insert("Objeto", Enlace); DataStructure.Insert("Nombre del diseño", "Factura"); ConnectWaitingHandler("Connectable_Print", 1, Verdadero); CommandDescription = PrintManageClient.PrintCommandDescription(Command.Name,FormName); Comience a instalar FileWorking Extension(); StartConnectingFileWorkingExtension(NewAlertDescription("ProcessConnectingFileWorkingExtension",ThisObject,NewStructure("CommandName",CommandDescription.Identifier))); EndProcedure // Fin StandardSubsystems.Print

Algunas aclaraciones:

1. En primer lugar, nuestro cliente trabaja en modo Thin y Web, por lo que de antemano configuramos los siguientes valores en las propiedades del Configurador:

Para evitar problemas al trabajar con el navegador

2. Usamos controladores de espera para evitar problemas con la sincronización de llamadas (esto solo aplica al modo Web)

3. Y por último, conecte la Extensión para trabajar con Archivos (recuerde que en modo Thin Client, esta extensión siempre está habilitada). Y a través del código:

transferimos el archivo al Cliente utilizando el mecanismo NavigationLink, recibimos los siguientes mensajes en el navegador (Thin funciona por sí solo):

Bueno, eso parece ser todo. Espero que esto ayude a alguien...

En cuanto a Word, ¿archivos de Excel insertados como datos binarios? ¿Cuál es el problema?

1. Tenemos que sacar estos Datos Binarios del diseño y llenarlos con datos de 1C y ATENCIÓN, escribirlos nuevamente en forma de Datos Binarios (Vodka Con Cerveza o Cerveza Con Vodka)

2. O debemos obtener el diseño de BinaryData en el lado del Cliente y completarlo allí, PERO el objeto COM solo es compatible con el navegador IE y luego baila con la configuración de ActiveX, otros navegadores han abandonado durante mucho tiempo el uso de ActiveX.

Creo que cada uno de los "siete" programadores se ha encontrado con ese error al menos una vez. Puede ocurrir durante la "fusión de configuraciones" o durante la "prueba y corrección de la seguridad de la información".

Pero no todos intentaron "arreglar" la configuración. En tales casos, generalmente buscan frenéticamente copias de seguridad o (un método más complejo) recurren a la ayuda de la utilidad GComp, que "según la leyenda" puede curar la MD si simplemente se "desmonta" y luego se "ensambla" usando las funciones del programa. De hecho, es así. Pero no en todos los casos... Éste es exactamente el caso que me gustaría examinar en este artículo.

Entonces, los datos iniciales:

- "configuración rota";

Utilidad MDDiags

- LejosGerente y complemento ArchivoDocNavegador a él. Con este complemento, puede ingresar al MD y trabajar con sus objetos.

Dado que el Configurador se niega incluso a mostrar este "error incorregible", ejecutamos MDDiags para identificarlo o ellos.

Después de iniciar la utilidad, seleccione la configuración deseada, luego todas las configuraciones predeterminadas... ejecute, analice y obtenga el resultado.

Es posible que tenga otros errores, pero creo que podrá resolverlos una vez que tenga una comprensión general de cómo encontrar el error y cómo solucionarlo.

1.Error>(\\Diario)

La utilidad dejó en claro que el error se observó en 2 objetos "\\ Diario\Diario_Número 212" y "\\Diario\Diario_Número 860". Ahora vayamos aLejos y mira los objetos allí.


Vemos aquí muchos objetos y un archivo "Container.Contents". Almacena descriptores de estos mismos objetos. Después de estudiar detenidamente el contenido del archivo, entendemos que no hay descriptores para nuestros 2 objetos.

Agregue descriptores como se muestra en la figura.

Problema resuelto.

2. Error DOCUMENTO.Recibo Factura (\\Texto escrito\Ayuda de usuario_Número434\Envase.Contenido)

Nos dirigimos nuevamente a MD por el camino indicado. Abre el archivo " Envase. Contenido " y observe atentamente su contenido.

Las extrañas palabras Cgntainer, Contentq, Prmgram llaman inmediatamente tu atención. Así es, estos son identificadores mal escritos. No es difícil adivinar cómo debería ser correcto (si le resulta difícil, vaya a la siguiente rama, abra el mismo archivo "Container.Contents" y vea cómo debería escribirse).

3.ErrorDIRECTORIO.Operaciones típicas(\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream)

Abra el archivo en la ruta especificada y mire con atención... Todos los parámetros deben estar entre comillas. Uno de los parámetros tiene un "espacio" en lugar de una "comilla": lo corregimos (este error puede ocurrir cuando la descripción de uno de los elementos de un objeto (campo, botón, lista de valores, etc.) contiene un solo o comillas dobles, o cualquiera de los "caracteres especiales").

lancemos de nuevo MDDiags y vemos que todos los errores anteriores han desaparecido, pero ha aparecido otro error.

Ahora es el momento de recurrir a la utilidad GComp y comprobar la “leyenda”...

Lanzamos la utilidad, seleccionamos nuestro MD roto (por ahora), y la carpeta donde debemos poner la configuración ordenada por objetos, luego todas las casillas de verificación están por defecto, lo único es marcar la casilla de “eliminar”. plantillas en blanco tablas" en la pestaña "Parámetros generales", haga clic en "Descompilar".

Luego, sin más preámbulos, vaya a la pestaña "compilación", establezca el directorio de origen en aquel en el que acaba de analizar la configuración e indique la ruta al nuevo MD.

La utilidad ensamblará todo de forma segura.

Ahora sólo nos queda Gerente lejano reemplace el archivo correspondiente dentro del MD “roto” con el mismo del “recién ensamblado” (\\Subconto\Subconto_Number5870\WorkBook\Dialog Stream).

Volvemos a comprobar la configuración usando MDDiags.

Todo parece estar bien. Ahora entramos en el configurador y hacemos “pruebas y corrección de seguridad de la información” para asegurarnos de que no haya más errores.

Eso es todo. Déjame despedirme. ¡Y que la Fuerza esté contigo!)

PD Un agradecimiento especial a los desarrolladores de las utilidades utilizadas en el ejemplo: nos ayudan a todos a vivir mucho...

¡Buenas tardes!. La última vez vimos cómo solucionar "Error al aplicar transformaciones. Verifique la corrección de las rutas de las transformaciones especificadas", hoy les contaré otra consecuencia de esto. El tema de la publicación será una situación en la que no puede instalar la plataforma 1C y recibirá un mensaje: Error de Windows: error de ejecución de función, lo solucionamos en un minuto, estoy seguro que el tema será de utilidad para muchos.

¿Cómo se ve un error de ejecución de función?

Como escribí anteriormente, tengo este problema en un servidor terminal Windows Server 2012 R2 cuando intento instalar la plataforma 1C 8.2. Después de ejecutar el archivo setup.exe, aparece la ventana del asistente de instalación, e inmediatamente una ventana adicional con el mensaje:

Error de Windows: error de ejecución de función

Por lo cual recibirá esta notificación:

Como ocurre en la mayoría de casos con la plataforma 1C, todo se puede solucionar con una pequeña corrección en los archivos de configuración. Primero, active mostrar carpetas ocultas, ya que el archivo que necesitamos no está visible de forma predeterminada. A continuación, en la unidad C:\, busque la carpeta Datos del programa.

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

El archivo 1CEStat.cfg se puede abrir usando cualquier editor de texto, haga clic derecho sobre él y seleccione "Abrir con", y luego un editor conveniente.

En el archivo 1CEStat.cfg, busque el parámetro, debe eliminarlo y guardar el archivo.

Si observa los registros en el visor de eventos, verá eventos como estos.

Código de evento 1013: Producto: 1C:Enterprise 8.2 (8.2.19.130) - Error de Windows: Error de ejecución de función.

ID de evento 11708: Producto: 1C:Enterprise 8.2 (8.2.19.130): falló la operación de instalación.

Después de eliminar el parámetro ADMINISTRATIONFUNC=0, ya recibimos:

ID de evento 1033: Windows Installer ha instalado el producto. Producto: 1C:Enterprise 8.2 (8.2.19.130). Versión: 8.2.19.130. Idioma: 1049. Fabricante: 1C. Instalación completada con estado: 1603.




Arriba