1c champ du document html pour passer des paramètres. Formulaires gérés : champ de document HTML et client Web. Créer un lien vers un objet de base de données
Question : Le code HTML n'est pas affiché dans le champ HTML des formulaires gérés par Document 1C
Bonne journée! Dites à quelqu'un, je crée un traitement externe, créé un formulaire, créé un champ dans le formulaire, créé un accessoire dans le formulaire (type : chaîne illimitée), chemin de données : accessoires (affichage : champ de document HTML), dans le module que j'ai écrit par programmation :
&ChezClient
Procédure Field1DocumentGenerated(Item)
CetObjet.Props = "
bienvenue
Qu'est ce que j'ai mal fait?
Réponse: Qui a besoin de cette idée, prenez-la, chaîne de travail et stable prête à l'emploi, testée en 1C: formes gérées Retail 8 / 2.2 !!!
Question : Champ de document HTML FormElements.IE.Document.getElementsByClassName()
L'histoire est FormElements.IE.Document.getElementsByClassName("loginform__input-border") renvoie normalement l'élément souhaité, mais ici
ElementsForm.IE.Document.getElementsByClassName("loginform__input-field ng-dirty ng-valid ng-touched") ne trouve pas
celles. ne fonctionne pas quand il y a des espaces dans le nom...
Pourquoi?
Réponse:() Y a-t-il plusieurs formulaires sur la page ? Si ce n'est pas le cas, obtenez un tableau de formulaires et sélectionnez celui dont vous avez besoin.
Question : l'attribut du formulaire est en cours d'effacement (le champ du document html)
Réponse:
Question : Comment travailler avec le champ d'un document HTML ?
Dites-moi comment vous pouvez mettre en œuvre les actions suivantes ou donnez un lien vers le matériel.
Il est nécessaire de remplir par programme les champs du formulaire du site, de se connecter et de remplir par programme les champs suivants sur le site.
???
Ajouté après 5 heures 9 minutes
Vous devez remplir par programme les entrées "s et cliquer sur le bouton ..
Ajouté après 16 heures 29 minutes
Comment remplir les champs compris. Une idée de comment cliquer sur le bouton ?
Ajouté après 1 heure 17 minutes
Tout compris. Le sujet peut être fermé/supprimé
Réponse: Par com. Maintenant, il n'y a plus de temps. Je posterai dans l'après-midi ou le soir.
Question : Champ de document HTML (pas encore, mais encore)
Bonjour à tous.
formulaires gérés. Conf auto-écrit. Vous avez des "erreurs de script" lors de l'affichage d'une page Web dans un champ de document HTML. Non, je n'essaie pas de créer un navigateur à part entière dans 1C (une référence au formulaire général "Navigateur" dans les formulaires standard), mais certains formulaires élémentaires, par exemple un formulaire d'autorisation sur Google, doivent être affichés. Et je voudrais sortir de manière humaine, afin que l'utilisateur ne soit pas surpris des malédictions sur les scripts.
Ce qui a été fait:
J'ai configuré IE dans Windows pour ignorer les scripts. Aidé. Mais l'accord n'a pas été adopté en raison des inconvénients liés à la configuration de chaque ordinateur client.
Des scripts ont été supprimés du contenu de la page reçue à l'adresse où l'événement Document généré s'est produit. N'a pas aidé. Les malédictions parviennent à sauter devant le nez de l'utilisateur génial avant que les scripts ne soient jetés.
Le document a été envoyé pour être formé sur le serveur. Ensuite, le code HTML a été débarrassé des scripts et envoyé au client dans le champ du document HTML. Aidé. Mais cliquer sur les boutons et autres formulaires sur le client était difficile - de nombreuses actions nécessitent un contexte qui a été laissé sur le serveur (cookies). Et même si vous laissez les scripts des boutons nécessaires et faites glisser les cookies du serveur vers le client, il est irréaliste de suivre toutes les transitions et variations possibles du contenu des pages "étrangères", et toutes sortes de redirections qui peuvent survenir. Piratage potentiel détecté.
Sélectionné typique pour la mise en œuvre de la sortie du code HTML de quelqu'un d'autre. N'a pas aidé. Soit tout n'est pas encore "tordu", soit les développeurs du fournisseur ne contactent pas le code HTML inconnu, soit ils arrêtent la sortie dans le client Web et les problèmes restants avec les scripts sont ignorés.
Aider....
Réponse:() informations précieuses, merci
Question : Aide pour ouvrir le site via le champ du document HTML
Bon après-midi. Il existe un site internet
Qui ne prend pas en charge les anciens navigateurs.
Il doit être ouvert dans le champ du document HTML.
J'ai essayé de faire le mode de compatibilité :
Site Web = "
Peut-être que j'utilise les balises de manière incorrecte pour la compatibilité.
Merci d'avance
Réponse:() Merci, ça m'a aidé.
Impossible de trouver la clé de registre pour win 10.
Question : Champ et image du document HTML
C'est un bug ou...?
Lorsque vous collez depuis le presse-papiers, au lieu d'une image, une croix. Dans les propriétés de l'image, l'adresse est affichée sous la forme "cid:image001.jpg@01D0C0A8.FD63F6D0". J'ai essayé de copier depuis Outlook "a et le navigateur
Réponse: ajoutez une image aux images, puis dans le champ html ..
Question : Comment faire référence à l'attribut de la partie tabulaire du document ? (formulaire géré 1C 8.3.11)
Bonjour à tous Il n'y a pas beaucoup d'expérience de développement dans 1 C 8.3 jusqu'à présent, donc je demande conseil Il existe un document avec une partie tabulaire Grille de dimension avec les détails Modèle de groupe (chaîne) et Taille (répertoire des caractéristiques de nomenclature) Le modèle de groupe est rempli avec une demande (les dimensions du registre d'informations sont remplies) à côté de la colonne Taille, vous devez remplir manuellement les mêmes dimensions uniquement à partir du livre de référence
J'aimerais remplir la colonne Taille avec un cycle, d'autant plus que les noms sont complètement identiques, comment accéder à l'attribut de la partie tabulaire Dimension Grid ?
À travers Object.DimensionalGrid.Size dit que le champ est introuvable ? pourriez-vous me dire comment mettre en œuvre la procédure?
Procédure FillTemplateOnServer() Requête = Nouvelle requête ; Requête.Texte = "SELECT | SizesAgeGroup.CharacteristicNomenclature.Name AS TemplateGroup | RegisterInformation.SizesAgeGroup AS SizesAgeGroup |WHERE | AgeGroupSizes.TargetGroup = &TargetGroup | |COMMANDER PAR | DimensionsAgeGroup.OrderInList" ; Query.SetParameter("TargetGroup", Object.NomenclatureGP.Composition.TargetGroup); Object.DimensionalGrid.Load(Query.Execute().Unload()); TK=Query.Execute().Unload() ; Pour chaque page du TK, le cycleTemplateValue=Page.GroupTemplate;Object.DimensionalGrid.Size=TemplateValue;EndCycle;EndProcedure Cordialement Damir
Réponse: Tout a bien fonctionné Merci
Question : Erreur lors du calcul de la somme de la ligne actuelle d'une section tabulaire dans un formulaire de document géré
Dis moi ce qui ne va pas?
Pourquoi le calcul ne fonctionne-t-il pas ?
(Document.Invoice.Form.DocumentForm.Form(5,23)) : variable non définie (FormElements)
StringTabularPart=<>>FormElements.Materials.CurrentData ;
Réponse: Code dans le module de formulaire ?
Les formulaires gérés utilisent des éléments au lieu de FormElements
Bon après-midi. La question se posa ensuite. Depuis la procédure du document, j'appelle le formulaire de l'élément de référence, le remplis et l'écris, et il faut qu'après avoir écrit dans la procédure que tout cela a appelée, j'obtienne un lien vers l'élément créé.
Le code de procédure est le suivant :
Code 1C | ||
|
il est clair que le formulaire de l'objet de référence s'ouvre dans cette section de code
Lors de la mise en œuvre d'un projet, il est devenu nécessaire d'exécuter du code javascript (ci-après dénommé JS) sous le contrôle de l'objet HTML Document Field, avec le résultat obtenu en 1C. Les exemples donnés dans les articles trouvés ne semblaient pas très pratiques à utiliser (un avis purement personnel). Il a été décidé d'essayer de trouver une autre solution plus simple, pas plus d'un jour a été alloué pour la recherche.
DIV.setAttribute("onclick", "alert("Coordinates");");
Exécuter le script
DIV.click();
ET VOILÀ. tout fonctionne
Procédure ExecuteScript(TextScript) DIV = Elements.doc.Document.getElementById("TEST"); DIV.setAttribute("onclick", TextScript); DIV.click(); FinProcédure
Mise à jour au 08/02/2016
Une autre façon d'appeler JS a été suggérée dans les commentaires (merci), si vous avez la possibilité de modifier le code HTML du document, vous pouvez y écrire une fonction, puis l'appeler. en lui passant le code JS.
puis en 1C :
Elements.DocumentHTMLField1.Document.parentWindow.exec("alert("OK")");
Retourner un résultat JS en 1C
Pour transférer le résultat du script vers 1C depuis l'objet FieldHTMLDocument, nous allons utiliser un événement. Lions un événement OnClick au champ HTMLDocument qui reçoit 3 paramètres en entrée :
- L'élément dans lequel l'événement s'est produit (le champ du HTMLDocument lui-même)
- objet événement
- Signe de la mise en œuvre du comportement standard
Pour déclencher un événement au clic, vous devez exécuter le code js suivant
Varevt = document.createEventObject(); // crée un objet d'événement vide evt.propertyName = "function1" ; // Je propose de mettre le nom du résultat dans le prop propertyName (quelque chose comme un type, ou le nom de la fonction à partir de laquelle les données ont été reçues) evt.data = "156"; //nous transmettrons les données de résultat à la propriété de données document.body.fireEvent("onclick", evt); // exécute l'événement sur clickHtmlDocumentField
Après avoir exécuté ce code js dans la procédure, lorsque le deuxième paramètre est cliqué, l'objet événement que nous avons créé viendra. Ce qui est assez facile à manipuler.
Exemple d'analyse de réponse.
&Chez le client // obtenir le nom et le résultat de l'événement Procedure DocOnClick(Element, EventData, StandardProcessing) OperationName = EventData.Event.propertyName; OperationData = EventData.Event.data ; Si OperationName = "" Alors //pas notre événement Return ; Fin si; If OperationName = "Function1" Then // traite le résultat ElseIf OperationName = "function2" Then // traite le résultat //...... EndIf; FinProcédure
Cette méthode supprime l'utilisation de gestionnaires d'attente et fournit un identifiant d'événement pratique. Grâce à l'identifiant, nous savons exactement quelles données nous avons reçues et comment les analyser.
Ajouts à partir du 26/03/2016
Et à cet endroit aussi, des malentendus se sont produits (l'erreur n'est reproduite que sur la plate-forme 8.3.5.1570, mais afin d'éviter ces situations à l'avenir, je donnerai une solution) La raison même - lors de la relance du formulaire avec le champ HTML du document au moment de l'appel de procédure, lors d'un clic sur le champ HTML, l'appel de la plateforme bloquait et faisait tomber tout l'objet COM (Une exception s'est produite (fichier html) : erreur non définie). La solution consistait à désactiver l'exécution standard de l'événement de clic et à désactiver le mode de propagation de l'événement. Comment faire cela, voir ci-dessous.
// désactiver le bouillonnement d'événement
Evt.cancelBubble = true ;
// désactiver le comportement par défaut
Evt.returnValue = faux ;
En conséquence, nous obtiendrons une fonction pour transférer des données vers 1 à partir de JS.
Fonction return1c(name,data)( var evt = document.createEventObject(); evt.propertyName = name; evt.data = data; evt.cancelBubble = true; evt.returnValue = false; document.fireEvent("onclick",evt ); );
Conclusion.
En combinant ces méthodes, vous pouvez très facilement exécuter le code js dont vous avez besoin et recevoir des données en 1C pour un traitement ultérieur.
Exemple de mise en œuvre dans
La plate-forme 1C est un outil assez puissant conçu pour résoudre un large éventail de tâches. Dans cet article, nous voulons parler d'un type d'objet, avec lequel vous pouvez :
- Travailler avec des composants ActiveX ;
- Appelez Javascript ;
- Créer et utiliser des liens vers divers objets de base de données.
Cet objet est appelé dans le champ 1C du document HTML.
Le contrôle HTMLDocumentField a une limitation importante dans son utilisation - il ne peut pas être utilisé pour les champs situés dans une table.
Créer votre propre navigateur en 1C
Essayons d'utiliser ce champ pour créer un traitement qui ouvre un lien vers une ressource sur Internet :
Voyons comment cela fonctionne. Prenez une photo (Fig. 4)
Fig.4.
Analysons ce que nous voyons :
- Une fenêtre de recherche s'est ouverte, avec un lien vers le site, tandis que la recherche s'effectue à l'aide du moteur de recherche par défaut ;
- Le traitement fonctionne, les pages Web s'ouvrent, les liens sont cliqués ;
- Une erreur de script s'est produite lors de l'appel de la ressource.
Quelle est l'erreur ? Avec le fait que HTMLDocumentField est en fait un Internet Explorer typique, et non la dernière version, qui ne prend pas en charge la plupart des ressources modernes. Ainsi, les sites qui ne prennent pas en charge le mode de compatibilité s'ouvriront avec des erreurs dans le script.
Pour le confort de l'utilisateur, il est possible de créer des commandes de navigation "Avant" et "Retour" sur le formulaire, qui décriront les mouvements correspondants.
Créer un lien vers un objet de base de données
La tâche est :
- Créez une liste de tous les objets, disons les éléments du répertoire "Employés" ;
- Obtenez un lien vers chacun d'eux;
- Ouvrez-les en cliquant directement sur le lien approprié.
Créons notre traitement et formons dessus.
Regardons de plus près ce que nous avons fait :
- Créé un document texte qui contient le "corps" de notre site ;
- Le début et la fin du document, ainsi que le corps de notre document HTML, nous avons décrit en utilisant les balises appropriées ;
- Enregistré chaque employé en elle ;
- Dans les dossiers des employés, nous contenons des informations dont nous aurons besoin plus tard lorsque nous ouvrirons les éléments en cliquant sur le nom complet des employés ;
- Nous définissons notre champ sur du texte décrivant la structure.
En essayant maintenant d'activer l'un des hyperliens disponibles, nous rencontrerons le fait que "Cette page n'a pas été trouvée" (Fig. 8)
Fig.8
Continuons à décrire le gestionnaire.
Créons une procédure qui gère un clic de souris sur un lien hypertexte vers un élément de répertoire (Fig. 9).
Fig.9
Considérons-le plus en détail:
- Tout d'abord, désactivons le traitement standard des clics sur les liens hypertexte ;
- Obtenons une chaîne qui caractérise notre élément, pour cela nous obtenons la valeur du paramètre Element.id dans EventData;
- Séparons la chaîne résultante conformément aux règles par lesquelles nous l'avons formée (le nom du répertoire et l'identifiant unique, séparés par un tiret) ;
- Obtenez une référence à l'élément à l'aide de la fonction ReturnReference ;
- Nous ouvrons l'élément par le lien reçu.
Testons l'exécution du code généré.
L'utilisation de fenêtres modales étant interdite dans les paramètres de notre programme, l'exécution du code ci-dessus s'est terminée par une erreur (Fig. 10). Sinon, tout fonctionnerait bien.
Fig.10
Passons au configurateur dans le menu Texte->Refactoring->Appels synchrones obsolètes->Appels du module de transformation. Après un certain temps, le texte de notre module ressemblera à la Fig.11
Fig.11
Après avoir réessayé le traitement, vous pouvez vous assurer que tout fonctionne correctement et lorsque vous cliquez sur le lien, l'élément correspondant du répertoire s'ouvre.
Quelques explications sur le code. Les statistiques indiquent qu'au sein d'une même base de données, il est peu probable que des éléments portant les mêmes identifiants existent, mais la plate-forme ne peut garantir l'unicité qu'au sein d'une même table. C'est pourquoi nous avons formé un lien en deux parties.
Quelques mots sur Javascript
Les appels aux fonctions JS dans les versions antérieures du programme étaient effectués via le paramètre de champ document.parentWindow.MyFunk(), mais cette fonctionnalité a été perdue dans les navigateurs modernes. Les appels via eval() ne fonctionnent pas non plus.
La solution consiste à utiliser la fonction spéciale fireEvent, qui est un mécanisme universel d'échange de données entre 1C et Javascript.