Guarde la página html en 1s 8.3. Crear un enlace a un objeto de base de datos

27
Al integrar 1C con sitios web, siempre surge la pregunta de transferir algunos datos al servidor web. Ya sea la transferencia de parámetros de solicitud para recibir datos de un servidor web en 1C o la transferencia de datos desde 1C, que... 14
Los desarrolladores de la plataforma 1C a veces tienen la tarea de interactuar el sistema 1C: Enterprise con varios programas de correo y protocolos. 1C Enterprise 8.0 tiene medios bastante convenientes para enviar... 9
Al intercambiar datos con sitios web, se suele utilizar el formato JSON. Desafortunadamente, en 1C no hay procedimientos estándar para trabajar con este formato. Durante la implementación de uno de los proyectos, desarrollé una serie de procedimientos y... 8
El formato JSON en 1C no se implementó antes de la versión 8.3.6, pero a continuación daré ejemplos de funciones que se pueden utilizar para el funcionamiento completo de JSON en 1C. Versión anterior. JSON( Objeto JavaScript Notación) es formato de texto el intercambio de datos... 5
En este artículo intentaré describir con un ejemplo el proceso de análisis de un sitio web utilizando las herramientas 1C. Este artículo no es una instrucción de uso, solo demuestra las capacidades de 1C. ¿Que tenemos? 1. Un sitio de Internet en el que...

Durante la implementación de un proyecto, surgió la necesidad de ejecutar código javascript (en adelante JS) bajo el control del objeto HTMLDocument Field, obteniendo el resultado en 1C. Los ejemplos dados en los artículos encontrados no me parecieron muy cómodos de utilizar (opinión puramente personal). Se decidió intentar encontrar otra solución más sencilla; no se concedió más de 1 día para la búsqueda.

DIV.setAttribute("onclick", "alert("Coordenadas");");

Ejecutemos el script

DIV.hacer clic();

TA-DAH. todo esta funcionando

Procedimiento RunScript(TextScript) DIV = Elements.doc.Document.getElementById("PRUEBA"); DIV.setAttribute("al hacer clic", TextScript); DIV.hacer clic(); Fin del Procedimiento

Actualización del 02.08.2016

Los comentarios sugirieron otra forma de llamar a JS (gracias) si tienes la posibilidad de cambiar el código. documento HTML, entonces puedes escribir una función en él y luego llamarla. pasandole el código JS.

función ejecutiva(guión) (eval(guión); )

y luego en 1C:

Elements.HTMLDocumentField1.Document.parentWindow.exec("alerta("OK")");

Devolver el resultado JS en 1C

Para transferir el resultado del script a 1C desde el objeto HTMLDocument Field, usaremos un evento. Vinculemos el evento When Clicked al campo HTMLDocument, que recibe 3 parámetros de entrada:

  • El elemento en el que ocurrió el evento (el propio campo HTMLDocument)
  • Evento de objeto
  • Signo de cumplimiento del comportamiento estándar.
  • Para activar un evento al hacer clic, debe ejecutar el siguiente código js

    Var evt = document.createEventObject(); // crea un objeto de evento vacío evt.propertyName = "function1"; // Sugiero poner el nombre del resultado (algo así como un tipo, o el nombre de la función de la que se recibieron los datos) en el atributo propertyName evt.data = "156"; //transferiremos los datos del resultado al atributo de datos document.body.fireEvent("onclick", evt); // activa un evento cuando se hace clic en el campo HTMLDocument

    Al ejecutar este código js en el procedimiento, cuando haga clic en el segundo parámetro, llegará el objeto de evento que creamos. Lo cual es bastante cómodo de manejar.

    Un ejemplo de análisis de respuestas.

    &OnClient // obtiene el nombre y el resultado del evento Procedimiento DocWhenClicked(Element, EventData, StandardProcessing)OperationName = EventData.Event.propertyName; Datos de operación = Datos de evento.Evento.datos; Si OperationName = "" Entonces // no es nuestro evento Return; terminara si;

    Si NombreOperación = "Función1" Entonces // resultado del procesamiento ElseIf NombreOperación = "función2" Entonces // resultado del procesamiento //...... EndIf; Fin del Procedimiento

    Este método elimina la necesidad de controladores de espera y proporciona un identificador de eventos conveniente. Según el identificador, sabemos exactamente qué datos recibimos y cómo analizarlos.

    Adiciones del 26/03/2016 Y en este lugar también hubo algunos malentendidos (el error se reproduce solo en la plataforma 8.3.5.1570, pero para evitar estas situaciones en el futuro, daré una solución) La razón en sí es cuando se renueva el formulario. iniciado con el campo HTML del documento al momento de llamar al procedimiento al hacer clic en el campo HTML, la llamada de la plataforma se atascó y cayó por todas partes Objeto COM

    (Se produjo una excepción (archivo html): error no especificado). La solución fue deshabilitar la ejecución estándar del evento de clic y deshabilitar el modo emergente del evento. Cómo hacer esto, ver más abajo.

    // deshabilitar la difusión de eventos

    Evt.cancelBubble = verdadero;

    // deshabilitar el comportamiento estándar

    Evt.returnValue = falso;

    Como resultado, obtendremos una función para transferir datos a 1c desde JS.

    Función return1c(nombre,datos)( var evt = document.createEventObject(); evt.propertyName = nombre; evt.data = datos; evt.cancelBubble = true; evt.returnValue = false; document.fireEvent("onclick",evt );

    Conclusión.

    Al combinar estos métodos, puede ejecutar fácilmente el código js que necesita y recibir datos en 1C para su posterior procesamiento.

    A veces es necesario mostrar una página web directamente en un formulario. Consideraré esta posibilidad de la plataforma 1C usando el ejemplo de mostrar una página con el motor de búsqueda Yandex en un formulario, con resultados de búsqueda para la palabra ingresada en el campo del formulario.

    Aquellos. esta página:

    Foto 1

    Primero, creemos procesamiento externo, agregue el atributo “Dirección” con el tipo “Cadena”, longitud ilimitada.

    Figura 2

    Creemos un formulario de procesamiento. Transferiremos el atributo "Dirección" al formulario dos veces. Cambiemos el nombre de uno de los elementos de la representación de atributos a "Página" y cambiemos el tipo de elemento a "Campo de documento HTML".

    El formulario se verá así:

    figura 3

    Comencemos a procesar en el modo "Enterprise" e ingresemos la dirección de un recurso de Internet arbitrario. Y obtenemos el resultado:

    Figura 4

    ¿Cómo puede asegurarse de que la página de Yandex se muestre en el campo "Página", pero con resultados de búsqueda para una determinada palabra?

    Agreguemos el atributo del formulario: "Palabra clave" y transfirámoslo al formulario.

    Si observa detenidamente la dirección que aparece en la barra de direcciones de Yandex después de buscar la palabra clave "1C" (y será así: "http://yandex.ru/yandsearch?text=1%D1%81") , puede ver que la palabra ingresada está cifrada y transferida al texto de la variable de publicación. De aquí concluimos que todo lo que queda es descubrir cómo obtener el valor cifrado de la solicitud.

    Si investiga un poco, descubrirá que puede utilizar la función de script java "encodeURIComponent" para codificar variables en URL. Por supuesto, puede seleccionar por fuerza bruta el código para cada carácter del alfabeto y escribir el codificador usted mismo, o puede utilizar las capacidades del componente wscript, que se puede conectar desde 1C.

    Entonces, qué necesitamos:

    A) Conectar wscript

    B) Basado en palabra clave ensamblar un script que recibirá el valor devuelto por la función “encodeURIComponent” al pasarle nuestra palabra como parámetro, y luego el resultado resultante se escribirá en Archivo de texto con un directorio predefinido

    C) Desde 1C, reciba un archivo de texto creado con wscript y léalo.

    Hablando en el idioma incorporado, suena así:

    & Objeto KeywordOnChange(Element) del procedimiento OnClient. Dirección = "http://yandex.ru/yandsearch?text=" + ConvertKeyWord(); EndProcedure y función OnClient ConvertKeyword() FileNameTime = GetTemporaryFileName( "js"); Guardar directorio = StrReplace(Directorio de archivos temporales(), "\", "/"); SavingDirectory = StrReplace(SavingDirectory, "C:/", "C://"); Documento de texto = Nuevo documento de texto; Documento de texto. SetText (" valor = encodeURIComponent( " " " + Palabra clave + " " " ); |FSO = WScript. CreateObject( " " Scripting. FileSystemObject " " ); |f = FSO. CreateTextFile( " " " + SavingDir + " prueba. txt "+ " " , verdadero ) |f. WriteLine(valor); Documento de texto. Escribir(FileNameTime, TextEncoding. ANSI); WshShell = Nuevo COMObject(" WScript. Shell "); WshShell. Run(" wscript. exe " " " + FileNameTime + " " " " , 0 , - 1 ) ; Eliminar archivos (nombre de archivo y hora); Documento de texto = Nuevo documento de texto; Documento de texto. Leer(Directorio de archivos temporales() + "test.txt"); Cadena = Documento de texto. ObtenerTexto(); Devuelve Abbr(Cadena); Función final

    El editor HTML se utiliza para crear descripciones personalizadas en forma de documentos HTML. La ventana del editor contiene tres pestañas que le permiten ver y editar el documento.

    En la pestaña Edición, el documento se muestra en forma de texto y gráfico:

    En la pestaña Texto, el desarrollador tiene la oportunidad de editar el texto HTML del documento:

    La pestaña Ver tiene como objetivo mostrar el documento en la forma en que se mostrará al usuario:

    Trabajar con un documento HTML es similar a trabajar en un editor de texto normal, pero el editor HTML proporciona una serie de características adicionales, que se deben al uso del formato HTML:

    Formato de texto

    Se puede formatear el texto de un documento HTML: establecer su estilo, sangrías de párrafo, seleccionar tamaño de fuente, parámetros, tipo de letra, etc.:

    Al copiar texto de otros editores de texto(por ejemplo, Word) El editor HTML conserva el formato del texto original.

    Mesas

    Puede insertar tablas en un documento HTML y editar tanto los parámetros de las celdas de la tabla individuales como cambiar apariencia y los parámetros de toda la tabla:

    Imágenes

    Las imágenes se pueden colocar en un documento HTML. El desarrollador tiene la capacidad de establecer el tamaño de la imagen, su posición y el grosor del marco alrededor de la imagen:

    Inscripciones

    El editor HTML le permite utilizar inscripciones en documentos, objetos especiales de un documento HTML. Puede colocar texto, una tabla, una imagen u otra inscripción en la inscripción. Mientras ve el documento, los objetos de título adjuntos se desplazarán continuamente de derecha a izquierda.

    La plataforma 1C es una herramienta bastante poderosa diseñada para resolver una amplia gama de problemas. En este artículo queremos hablar de un tipo de objeto con el que podrás:

    • Trabajar con Componentes ActiveX;
    • Llame a Javascript;
    • Cree y utilice enlaces a varios objetos de bases de datos.

    Este objeto se llama campo de documento HTML en 1C.

    El control HTMLDocument Field tiene una limitación de uso importante: no se puede utilizar para campos ubicados en una tabla.

    Creación propio navegador en 1C

    Intentemos usar este campo para crear un procesamiento que abra un enlace a un recurso en Internet:

    Comprobemos cómo funciona... Hagamos una foto (Fig. 4)
    Fig.4.

    Analicemos lo que vemos:

  • Se ha abierto una ventana de búsqueda con un enlace al sitio y la búsqueda se realiza mediante buscador, asignado por defecto;
  • El procesamiento funciona, se abren páginas de Internet, se siguen enlaces;
  • Se produjo un error de secuencia de comandos al llamar al recurso.
  • ¿Qué está causando el error? Con el hecho de que el campo HTMLDocument es en realidad un estándar explorador de Internet, y no el más ultima versión, que no es compatible con la mayoría de los recursos modernos. Por lo tanto, los sitios que no admiten el modo de compatibilidad se abrirán con errores en el script.

    Para comodidad del usuario, puede crear comandos de navegación "Adelante" y "Atrás" en el formulario, que describirán los movimientos correspondientes.

    Crear un enlace a un objeto de base de datos

    La tarea es la siguiente:

    • Cree una lista de cualquier objeto, por ejemplo, elementos del directorio "Empleados";
    • Obtenga un enlace a cada uno de ellos;
    • Ábralos haciendo clic directamente en el enlace correspondiente.

    Creemos nuestro procesamiento y formemos en él.


    Echemos un vistazo más de cerca a lo que hicimos:

  • Creado Documento de texto, que contiene el “cuerpo” de nuestro sitio;
  • Describimos el principio y el final del documento, así como el cuerpo de nuestro documento HTML utilizando las etiquetas apropiadas;
  • Registramos a todos los empleados en él;
  • En los registros de los empleados tenemos información que necesitaremos más adelante cuando abramos elementos haciendo clic en los nombres completos de los empleados;
  • Establecemos nuestro campo en un texto que describe la estructura.
  • Si ahora intentamos activar alguno de los hipervínculos existentes, nos encontraremos con el mensaje “Esta página no fue encontrada” (Fig. 8)
    Fig.8

    Sigamos describiendo al controlador.

    Creemos un procedimiento que procese un clic del mouse en un hipervínculo a un elemento del directorio (Fig. 9).

    Fig.9

    Veámoslo con más detalle:

  • Primero que nada, apagámoslo. procesamiento estándar hacer clic en un hipervínculo;
  • Obtengamos una cadena que caracterice nuestro elemento; para esto, en los Datos del evento obtendremos el valor del parámetro Element.id;
  • Dividamos la cadena resultante de acuerdo con las reglas mediante las cuales la formamos (el nombre del directorio y un identificador único, separados por un guión);
  • Obtenemos un enlace a un elemento usando la función ReturnLink;
  • Abra el elemento utilizando el enlace recibido.
  • Probemos la ejecución del código generado.

    Dado que la configuración de nuestro programa prohíbe el uso de ventanas modales, la ejecución del código anterior falló con un error (Fig. 10). De lo contrario todo hubiera funcionado bien.

    Fig.10

    Vayamos al menú del configurador Texto->Refactorización->Llamadas síncronas obsoletas->Convertir llamadas de módulo. Después de un tiempo, el texto de nuestro módulo se verá como en la Fig. 11

    Fig.11

    Al intentar el procesamiento nuevamente, puede asegurarse de que todo funciona bien y cuando hace clic en el enlace, se abre el elemento del directorio correspondiente.

    Algunas explicaciones para el código. Las estadísticas dicen que dentro de una base de datos es poco probable que existan elementos con los mismos identificadores, pero la plataforma puede garantizar la unicidad sólo dentro de una tabla. Por eso formamos el vínculo en dos partes.

    Algunas palabras sobre Javascript

    Llamadas a funciones JS versiones anteriores Los programas se implementaron a través del parámetro de campo document.parentWindow.MyFunk(), pero esta característica se ha perdido en los navegadores modernos. Las llamadas vía eval() tampoco funcionan.

    La solución es utilizar la función especial fireEvent, que es un mecanismo universal para intercambiar datos entre 1C y Javascript.