Maison / Maîtriser l'ordinateur / 1c extension Web. Connexion à une infobase publiée via un navigateur Web

1c extension Web. Connexion à une infobase publiée via un navigateur Web

La tâche consiste à élever le serveur Web IIS intégré à Windows et à publier la base 1c sur la plate-forme 8.3. Il n'y a rien de difficile à cela.

Tournage disponible sur un serveur d'entreprise virtualka 2008 r2. Droits d'administrateur local sur celui-ci. Plate-forme 1C 8.3.6.2041. Créons une infobase vide. Alors commençons. Rejoignez notre groupe VK ! En réparation! Atelier intelligent !

Installation du rôle de serveur Web (IIS)

Vous devez d'abord installer le rôle de serveur Web. Nous ouvrons Gestionnaire de serveur, sélectionnez la branche à gauche Les rôles, clic-droit Ajouter un rôle.

Nous atteignons l'étape de sélection du rôle de serveur et cochez la case à côté de Web Server (IIS). Cliquez sur Suivant. Vous devez maintenant sélectionner correctement les services du rôle à installer. Mettez les cases à cocher exactement comme dans la capture d'écran ci-dessous.

Nous terminons l'installation. L'assistant d'ajout de rôles devrait nous dire après un certain temps que le rôle et tous les services de rôle ont été installés avec succès :

Maintenant, nous devons vérifier si tout a bien fonctionné pour nous. Ouvrez n'importe quel navigateur et accédez à l'adresse http://localhost. Nous devrions voir une image si joyeuse:


installation de la plateforme et des composants 1s

Cela signifie que le serveur Web a correctement démarré et que tout fonctionne correctement. Passons donc aux 1s. Vous devez mettre en place une plateforme. Le seul bémol lors de l'installation de la plateforme est de choisir :

  • 1C :Entreprise
  • Extensions de serveur Web
définition des droits d'accès

La première étape consiste à configurer les droits du dossier où se trouve le répertoire racine du serveur Web. Si rien n'a été changé, alors par défaut c'est C:\inetpub\wwwroot. Aller au dossier C:\inetpub\ choisir un dossier wwwroot, faites un clic droit dessus et allez dans les propriétés. Aller à l'onglet Sécurité. En cliquant sur le bouton de modification, nous passons directement à la configuration des autorisations. Rechercher dans la liste Groupes et utilisateurs, groupe Utilisateurs, et en cliquant dessus on met dans la colonne du dessous Autorisations de groupe, coches manquantes dans la colonne permettre.

Vous devez maintenant accorder des autorisations aux dossiers avec 1 installés. Passons à eux, par défaut pour la version 32 bits 1c est dans le dossier C:\Program Files (x86)\1cv8 pour 64 bits dans un dossier C:\Program Files\1cv8. Choisissez également un dossier 1cv8 allez dans ses propriétés, allez dans l'onglet Sécurité -> Modifier. Mais au lieu de sélectionner un groupe dans la liste, nous devons d'abord l'y ajouter. Pour cela, cliquez sur le bouton Ajouter, dans la fenêtre qui apparaît, appuyez sur le bouton En outre.


Cliquez ensuite sur le bouton Recherche et dans la liste des résultats que nous recherchons IIS_IUSRS, en l'ajoutant avec un double clic, nous ramène à la fenêtre Sélectionnez "Utilisateurs" ou "Groupes" mais avec un groupe déjà marqué dans la liste. Cliquez sur OK et revenez à la fenêtre Autorisations de groupe mettez toutes les coches dans le champ autoriser pour le groupe nouvellement ajouté.

Après avoir défini les autorisations pour les dossiers avec les fichiers 1c, il nous reste le dernier. Donner des droits à un groupe IIS_IUSRS sur le dossier où nous avons la base 1c elle-même.

Les préparatifs nécessaires ont été faits. Passons maintenant à l'édition.

Publication 1s sur un serveur web

Il faut démarrer 1s en mode configurateur en sélectionnant la base de données que vous souhaitez publier. Dans mon cas, c'est une base vide et il n'y en a qu'une.

En mode configurateur 1s, allez dans le menu Administration -> Publication sur un serveur Web.


Après avoir examiné les paramètres et s'être assuré que, par essence, tout nous convient, nous appuyons sur Publier. Si votre publication s'est déroulée sans erreur, passez à la dernière étape.

configuration d'IIS pour qu'il fonctionne avec un module d'extension de serveur Web 1C 32 bits

Permettez-moi de vous rappeler que nous avons utilisé une plate-forme 32 bits et un module d'extension de serveur Web de 1c, respectivement. Par conséquent, dans ce cas, nous devons toujours autoriser l'exécution du pool d'applications par défaut - Pool d'applications par défaut exécuter des applications 32 bits. Ce n'est pas difficile à faire. Allons-y Gestionnaire de serveur -> Les rôles -> Serveur Web (IIS) -> Gestionnaire de services (IIS) -> Pools d'applications -> Pool d'applications par défaut. Bouton droit de la souris activé Pool d'applications par défaut appel menu contextuel et choisissez-y Options supplémentaires.


Nous recherchons une ligne Applications 32 bits autorisées et mettre en face VRAI

CONFIGURATION D'IIS POUR FONCTIONNER AVEC UN MODULE D'EXTENSION DE SERVEUR WEB 1C 64 BITS

Si nous avons utilisé respectivement une plate-forme 64 bits et un module d'extension Web, nous devons effectuer les manipulations suivantes :

Allons-y Gestionnaire de serveur -> Les rôles -> Serveur Web (IIS) -> Gestionnaire de services (IIS)-> Et sélectionnez l'application convertie à partir du répertoire virtuel avec le nom que nous avons défini lors de la publication de la base de données. Dans le champ de droite, allez à la section Mappages de gestionnaires. Publication 1s 8.3 sur le serveur Web iis Publication 1s 8.3 sur le serveur Web iis

Rejoignez notre groupe VK !

06.04.2014

Disponible:

Windows 8.1 Professionnel.

Entreprise 1C, version 8.3.4.465.

Base de données ZUP 3.0.

Il est nécessaire d'établir l'accès à la base de données RAM spécifiée via un navigateur Internet ou un client léger.

Pour faciliter la compréhension, toutes les actions seront décrites à partir du panneau de contrôle.

    2. Publication d'une base de données de l'entreprise 1C.

    Après avoir installé IIS, vous devez exécuter le configurateur en tant qu'administrateur local et publier la base de données.

  1. Le configurateur lui-même configurera IIS.

Nous acceptons de redémarrer le serveur IIS après la publication d'une nouvelle base de données.


    7. Ouvrez le port dans le pare-feu.

    Panneau de commande - fenêtre pare-feu-Options supplémentaires.

    Créez une règle pour les connexions entrantes pour le port sélectionné.

8. Organisation du travail via Internet.

Pour accéder à la base de données à partir de "l'Internet ouvert", vous devez acheter une "adresse IP blanche" auprès du fournisseur. Au sens figuré, ce sera votre identifiant numérique, grâce auquel tous les ordinateurs Internet vous reconnaîtront. Si votre serveur Web sera avec cette adresse, alors rien d'autre ne doit être fait. Si Internet distribue un routeur ou un autre ordinateur avec un serveur proxy (c'est-à-dire une passerelle), alors sur cette passerelle, vous devez ouvrir l'un des ports et le rediriger vers le port de travail IIS sur le serveur Web. Dans les paramètres de la passerelle, vous devez spécifier le port entrant et où le trafic est redirigé - l'adresse IP et le port du serveur Web.

  1. 9. Lancez le navigateur.

    Dans mon cas, la ligne de lancement du navigateur ressemblera à ceci :

http - indication de protocole.

i7 - nom d'ordinateur DNS ou adresse IP du serveur Web.

180 - Port IIS (peut être omis si le port est le port par défaut)

hrm30 - répertoire de publication (c:\inetpub\wwwroot\HRM30)

Pour client léger la chaîne est spécifiée dans les paramètres de connexion.

Tout le monde peut travailler !

À l'avenir, vous ne devez pas oublier de mettre à jour la publication après la mise à jour de la plate-forme d'entreprise 1C.

9 janvier 2016 à 13:08

Publier une base de données 1C sur un serveur Web tiers

  • Configuration Linux

Il existe un serveur Windows avec 1C 8.3 (DB - MSSQL).
La tâche consiste à mettre en place la publication de la base de données sur un serveur Web Linux.
Subtilités - le module 1C pour Apache ne fonctionne qu'avec 2.0 et 2.2, et Version actuelle dans la plupart des distributions - 2.4+
J'écris plus pour moi, pour ne pas oublier. Eh bien, on ne sait jamais, tout à coup quelqu'un d'autre vous sera utile - vous n'avez pas à parcourir les forums à la recherche des bonnes commandes.

Iron - a donné un gigaoctet de RAM, un cœur et 20 gigaoctets de disque. Il n'est jamais trop tard pour se développer.
OS : Debian Stable, j'y suis habitué.

J'ai défini le minimum, y compris le serveur ssh, mais pas le web. Revenons à cela.

Après l'installation configuration de base au goût, je règle généralement les paramètres régionaux sur utf8, mets sudo, mc et vim, le reste au besoin.
Ensuite, vous devez installer apache 2.2. Et fais-le le droit chemin plutôt que de simplement télécharger le paquet deb. :)

Tout d'abord, ajoutez des lignes à /etc/apt/sources.list avec un lien vers la version précédente distribution.
deb http://mirror.yandex.ru/debian/ wheezy main deb-src http://mirror.yandex.ru/debian/ wheezy main
Vous pouvez bien sûr écrire vieille écurie- pour le moment, aussi, sera correct. Mais seulement dans le vrai, car tôt ou tard une nouvelle version stable sortira et dans vieille écurie puis au lieu d'apache 2.2 il y aura 2.4. Bien que, j'espère, d'ici là, 1C sera mis à jour et fonctionnera avec les nouvelles versions d'Apache. Mais qui sait? :)
miroir.yandex.ru- le nom de votre serveur favori avec le référentiel y est écrit.

Ensuite, nous mettons à jour les index - apt-obtenir la mise à jour- et voir ce que nous avons ici pour apache avec la commande apt-cache showpkg apache2
Il y a beaucoup de sortie, mais nous ne sommes intéressés que par le début de la sortie :
Paquet : apache2 Versions : 2.4.10-10+deb8u3 (/var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_binary-i386_Packages) Langue de description : en Fichier : /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-en MD5 : Langue de description : en Fichier : /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-en MD5 : 2.4.10-10+deb8u1 (/var/ Langage de description : Fichier : /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_binary-i386_Packages MD5 : Langage de description : en Fichier : /var/lib/ apt/lists/mirror.yandex.ru_debian_d ists_stable_main_i18n_Translation-en MD5 : Langue de description : ru Fichier : /var/lib/apt/lists/mirror.yandex.ru_debian_dists_stable_main_i18n_Translation-en MD5 : 2.2.22-13+deb7u6 (/var/lib/apt/lists/mirror.yandex .ru_debian_dists_wheezy_main_binary-i386_Packages) Langue de description : Fichier : /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_binary-i386_Packages MD5 : Langue de description : en Fichier : /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_i18n_Translation -en MD5 : Langue de description : en Fichier : /var/lib/apt/lists/mirror.yandex.ru_debian_dists_wheezy_main_i18n_Translation-ru MD5 :

Nous voyons qu'en plus de 2.4.10, il existe la version 2.2.22-13+deb7u6 - ce dont vous avez besoin.
Nous mettons: apt-get install apache2=2.2.22-13+deb7u6
Ou plus précisément : apt-get install apache2=2.2.22-13+deb7u6 apache2-mpm-worker=2.2.22-13+deb7u6 apache2.2-common=2.2.22-13+deb7u6, et le reste des dépendances sera automatiquement extrait.

Après cela, nous avons mis l'Apache en attente pour ne pas le mettre à jour par accident.

Apt-mark hold apache2 apache2-mpm-worker apache2.2-common apache2.2-bin apache2 est marqué comme engagé. apache2-mpm-worker est marqué comme engagé. apache2.2-common est marqué comme validé. apache2.2-bin est marqué comme commité.
Vous pouvez exécuter le service apache2 start et telnet sur le port 80 pour vérifier si vous êtes trop paresseux pour lancer le navigateur.

hôte local telnet 80
Essayer :: 1... Connecté à localhost. Le caractère d'échappement est "^]". 1 Méthode 501 non implémentée

Méthode non implémentée

1 à /index.html non pris en charge.


Serveur Apache/2.2.22 (Debian) au port 1cweb 80
Connexion fermée par hôte étranger.

Jure - cela signifie que cela fonctionne.

Maintenant, nous mettons 1C.
Seuls les services Web 1C sont nécessaires (package 1c-entreprise83-ws). ET 1c-entreprise83-commun, qui est enregistré dans les dépendances. ET 1c-enterprise83-server, qui n'est pas spécifié dans les dépendances, mais sans lui, l'utilitaire de publication écrit "Erreur de segmentation".
En principe, seul le module pour Apache est nécessaire wsap22.so du paquet 1c-entreprise83-ws, et tout le reste peut être fait via un éditeur de texte. Mais je suis une personne paresseuse et je préfère dépenser quelques mégaoctets sur 1C plutôt que de conduire manuellement des lignes dans des configurations. :)

Ensuite, vous devez créer un dossier pour stocker les paramètres de la base de données publiée 1C. C'est possible dans l'arborescence du serveur web, mais je ferais mieux de le faire séparément, directement à la racine, / 1s.
Après cela, à partir du dossier avec les fichiers 1C installés ( /opt/1C/v8.3/i386) exécutez l'utilitaire de publication webinst avec les paramètres suivants (je publie notre base de données de test) :
./webinst -apache22 -wsdir testlitupp -dir /1c/testlitupp -connstr "Srvr=10.0.0.4;Ref=testlitupp;" -confPath /etc/apache2/apache2.conf Publié

Apache22 - notre version du serveur Web
-wsdir testlitupp - dossier sur le serveur Web où la base de données publiée sera disponible (http://yourserver/testlitupp)
-dir /1c/testlitupp - dossier où le fichier default.vrd avec les paramètres de publication sera stocké
-connstr "Srvr=10.0.0.4;Ref=testlitupp;" - IP du serveur 1C et nom de la base de données publiée
-confPath /etc/apache2/apache2.conf - chemin vers la configuration apache

S'il indique "Publié", alors tout s'est bien passé. S'il indique "Erreur de segmentation", vous avez probablement oublié de mettre 1c-enterprise83-server.
Sur la base des résultats, nous avons le fichier default.vrd

Et quelques nouvelles lignes dans le fichier de configuration du serveur Web :

LoadModule _1cws_module "/opt/1C/v8.3/i386/wsap22.so" # 1c publication Alias ​​"/testlitupp" "/1c/testlitupp/" AllowOverride All Options None Order allow,deny Allow from all SetHandler 1c-application ManagedApplicationDescriptor "/1c/testlitupp/default.vrd"
On redémarre Apache (service apache2 restart) et on va voir ce qui y a été publié.
Publié, demande un mot de passe.

Et laissez-le entrer dans la base.

Travaux. Des paramètres de publication supplémentaires sont définis en modifiant les fichiers vrd (par exemple, en activant le débogage), et vos programmeurs 1C doivent être impliqués dans la finition de l'interface du client Web.
Si vous ajoutez des options, par exemple, avec des services de connexion manuels, n'oubliez pas de supprimer la dernière barre oblique de la ligne "base="/testlitupp" ib="Srvr=10.0.0.4;Ref=testlitupp;" dans le fichier default.vrd / >", j'ai tripoté ça pendant longtemps. Si vous ne supprimez pas et n'ajoutez rien après, une "erreur 500" s'envole sans informations supplémentaires.
Quelle sera la charge sur le serveur Web - je ne sais pas encore, cela fonctionne toujours en mode test pour nous et il y a suffisamment de ressources allouées. Mais ajouter de la mémoire ou des cœurs à mesure que les besoins augmentent ne pose aucun problème.

En général, dans les autres distributions de Linux, tout se fait de la même manière, les différences ne concernent que la manière d'installer l'ancienne version d'Apache.

Aujourd'hui, je vais laisser une petite post-note sur la configuration de 1C 8.3 en termes d'organisation de l'accès via le serveur WEB 1C et les services IIS 8.

Auparavant, à l'ancienne, je donnais aux utilisateurs l'accès à 1C à l'aide du serveur de terminaux. Ensuite, j'ai eu un serveur Windows 2003 avec 1C version 7 au travail, j'avais une licence Terminal Server où le serveur Terminal Server était déployé. J'ai aussi écrit une fois un article sur la mise en place de ce bien. Tout allait bien, mais nous avons maintenant un nouveau matériel (basé sur le processeur Intel Xeon E3-1220 v3, 8 Go de RAM), un nouveau 1C (v 8.3), un nouveau système d'exploitation (WIndows Server 2012 r2).

Dès le début, notre service comptabilité (8 PC) fonctionnait sur un lecteur réseau, mais dans ce cas le programme fonctionne sur le principe du téléchargement de fichiers sur le réseau, et cela est très lent. Il a été décidé de trouver un moyen d'accélérer les travaux.

J'ai pensé à un serveur de terminaux, mais je n'ai pas de licence pour un serveur de terminaux (je ne l'ai pas trouvé sur Internet, mais ils ont dit que c'était cher à l'achat). La sortie a été déclenchée par hasard, il s'avère qu'il existe un support pour le serveur WEB dans 1C. Depuis que j'ai de l'expérience avec le même Apache et que je connais le principe de fonctionnement, j'ai décidé de maîtriser le serveur WEB 1C.

Installation et vérification de tous les composants

Commençons la configuration en installant les composants du serveur Web 1C. Vérifions que le module d'extension de serveur Web 1C est installé. S'il n'est pas installé, installez.

Publication de la base de données sur le serveur Web

Nous allons dans la base de données 1C en mode configurateur. Ensuite, nous allons dans le menu. "Administration" - "Publier sur un serveur Web"

Nous publions !

Nous définissons les droits sur les dossiers 1C

L'étape suivante consiste à définir des autorisations sur les dossiers suivants :

Le dossier bin en 1C.

Nous définissons les droits comme dans la capture d'écran ci-dessous dans le menu de sécurité.

Connexion au serveur Web à partir des ordinateurs clients

Pour cela, créez une connexion à la DB 1C - Ecrivez le nom de la connexion -> sélectionnez Sur le serveur web -> puis comme dans l'image ci-dessous :

Après cela, vous pourrez vous connecter à 1C via un serveur Web.

Erreurs rencontrées :

1C8.3 IIS "Valeur Request.Path potentiellement dangereuse détectée" reçue du client

Après avoir configuré le serveur Web 1C, j'ai rencontré un problème: je peux me connecter à 1C par IP, je me connecte, mais tous les menus ne fonctionnaient pas, je ne pouvais pas ouvrir une seule fenêtre sauf le bureau 1C. J'ai longtemps lutté jusqu'à ce que je trouve une solution sur Internet.

Qu'est-ce qui devrait être fait:
1. Ouvrez IIS. Démarrer - Exécuter - trouver "IIS Manager"
2. Ouvrez notre "site"
3. Allez dans le menu "Mappages de gestionnaires"
4. À la recherche ISAPI-dll, puis choisissez Modifier.
5. Changez le chemin de la requête de "*.dll" à "*", Fichier exécutable (vous pouvez avoir une version différente de 1C, soyez plus prudent) - "C:\Program Files (x86)\1cv8\ 8.3.6.2390 \bin\wsisapi.dll".
6. Sauvegardez.

7. Nous vérifions.

C'est tout pour le moment. Si vous avez des questions, je vais essayer de vous aider.

L'une des fonctionnalités intéressantes de la technologie 1C:Enterprise est qu'une application développée à l'aide de la technologie des formulaires gérés peut être lancée à la fois dans un client léger (exécutable) sous Windows, Linux, MacOS X, et en tant que client Web pour 5 navigateurs - Chrome, Internet Explorer, Firefox, Safari, Edge, et tout cela sans modifier le code source de l'application. De plus, extérieurement, l'application dans le client léger et dans le navigateur fonctionne et semble presque identique.
Trouvez 10 différences (sous la coupe 2 images):

Fenêtre client léger sous Linux :

La même fenêtre dans le client Web (dans le navigateur Chrome) :

Pourquoi avons-nous créé un client Web ? Parlant quelque peu pathétiquement, le temps nous a confié une telle tâche. Depuis longtemps, le travail sur Internet est devenu un pré-requis pour les applications métiers. Tout d'abord, nous avons ajouté la possibilité de travailler via Internet pour notre client léger (certains de nos concurrents s'y sont d'ailleurs arrêtés ; d'autres au contraire ont abandonné le client léger et se sont limités à la mise en place du client web). Nous avons décidé de donner à nos utilisateurs la possibilité de choisir l'option client qui leur convient le mieux.

L'ajout de fonctionnalités Web au client léger était une entreprise de grande envergure, avec un changement complet de l'architecture client/serveur. La création d'un client Web est un tout nouveau projet qui a commencé à partir de zéro.

Formulation du problème

Donc, les pré-requis pour le projet : le client web doit faire la même chose que le client léger, à savoir :
  1. Afficher l'interface utilisateur
  2. Exécuter le code client écrit en langage 1C
L'interface utilisateur en 1C est décrite dans un éditeur visuel, mais de manière déclarative, sans disposition pixel par pixel des éléments ; environ trois douzaines de types d'éléments d'interface sont utilisés - boutons, champs de saisie (texte, numérique, date / heure), listes, tableaux, graphiques, etc.

Le code client en langage 1C peut contenir des appels au serveur, travailler avec des ressources locales (fichiers, etc.), imprimer, et bien plus encore.

Le client léger (lorsqu'il travaille via le Web) et le client Web utilisent le même ensemble de services Web pour communiquer avec le serveur d'applications 1C. La mise en œuvre des clients, bien sûr, est différente - le client léger est écrit en C ++, le client Web est écrit en JavaScript.

Un peu d'histoire

Le projet client web a débuté en 2006 avec une équipe (moyenne) de 5 personnes. A certaines étapes du projet, des développeurs sont intervenus pour mettre en place des fonctionnalités spécifiques (tableur, schémas, etc.) ; en règle générale, ce sont les mêmes développeurs qui ont créé cette fonctionnalité dans le client léger. Ceux. les développeurs ont réécrit des composants en JavaScript qu'ils avaient précédemment créés en C++.

Dès le début, nous avons rejeté l'idée de toute conversion automatique (au moins partielle) du code C++ du client léger vers le JavaScript du client Web en raison des fortes différences conceptuelles entre les deux langages ; le client Web a été écrit en JavaScript à partir de zéro.

Dans les premières itérations du projet, le client Web a converti le code client dans le langage 1C intégré directement en JavaScript. Le client léger agit différemment - le code dans le langage 1C intégré est compilé en bytecode, puis ce bytecode est interprété sur le client. Par la suite, le client Web a commencé à faire de même - d'une part, il a donné un gain de performances, et d'autre part, il a permis d'unifier l'architecture des clients légers et Web.

La première version de la plate-forme 1C:Enterprise avec prise en charge du client Web a été publiée en 2009. Le client Web à l'époque prenait en charge 2 navigateurs - Internet Explorer et Firefox. Les plans initiaux étaient de prendre en charge Opera, mais en raison de problèmes insurmontables avec les gestionnaires de fermeture d'application dans Opera à ce moment-là (il n'était pas possible de suivre avec une certitude à 100% que l'application se fermait, et à ce moment-là d'effectuer la procédure de déconnexion du serveur d'application 1C), ces plans ont dû être abandonnés.

Structuration du projet

Au total, la plateforme 1C:Enterprise compte 4 projets écrits en JavaScript :
  1. Les WebTools sont des bibliothèques partagées utilisées par d'autres projets (nous incluons également la Google Closure Library ici).
  2. Contrôle FormattedDocumentFormatedDocument control
  3. Contrôle du planificateur (implémenté en JavaScript dans le client léger et le client Web)
  4. Client Web
La structure de chaque projet ressemble à la structure des projets Java (ou des projets .NET - selon ce qui est le plus proche de vous) ; nous avons des espaces de noms, et chaque espace de noms se trouve dans dossier séparé. À l'intérieur du dossier se trouvent des fichiers et des classes d'espace de noms. Il y a environ 1000 fichiers dans le projet client Web.

Structurellement, le client Web est largement divisé en sous-systèmes suivants :

  • Interface d'application cliente gérée
    • Interface générale de l'application (menus système, panneaux)
    • Interface formulaires gérés, qui comprend, entre autres, une trentaine de commandes (boutons, Divers types champs de saisie - texte, numérique, date/heure, etc., tableaux, listes, graphiques, etc.)
  • Modèle objet disponible pour les développeurs sur le client (plus de 400 types au total : modèle objet d'interface managée, paramètres de composition des données, mise en forme conditionnelle, etc.)
  • Interprète de langage intégré 1C
  • Extensions de navigateur (utilisées pour les fonctionnalités non prises en charge dans JavaScript)
    • Travailler avec la cryptographie
    • Travailler avec des fichiers
    • Technologie composants externes, leur permettant d'être utilisés à la fois dans les clients légers et Web

Fonctionnalités de développement

Implémenter tout ce qui précède en JavaScript n'est pas une tâche facile. Le client Web 1C est peut-être l'une des plus grandes applications côté client écrites en JavaScript - environ 450 000 lignes. Nous utilisons activement une approche orientée objet dans le code du client Web, ce qui simplifie le travail avec un projet aussi important.

Pour minimiser la taille du code client, nous avons d'abord utilisé notre propre obfuscateur, et à partir de la version 8.3.6 de la plateforme (octobre 2014), nous avons commencé à utiliser le Google Closure Compiler . L'effet de l'utilisation en nombre est la taille de l'infrastructure du client Web après obfuscation :

  • Propre obfuscateur - 1556 ko
  • Compilateur de fermeture Google - 1073 ko
L'utilisation de Google Closure Compiler nous a permis d'améliorer les performances du client Web de 30 % par rapport à notre propre obfuscateur. De plus, la quantité de mémoire consommée par l'application a diminué de 15 à 25 % (selon le navigateur).

Google Closure Compiler fonctionne très bien avec du code orienté objet, son efficacité est donc la plus élevée pour un client Web. Le Closure Compiler fait quelques bonnes choses pour nous :

  • Vérification de type statique au stade de la construction du projet (fournie par le fait que nous couvrons le code avec des annotations JSDoc). Le résultat est un typage statique, de niveau très proche du typage en C++. Cela permet de détecter un pourcentage assez important d'erreurs au stade de la compilation du projet.
  • Réduction de la taille du code par obfuscation
  • Un certain nombre d'optimisations du code exécutable, par exemple, telles que :
    • substitutions de fonctions en ligne. L'appel d'une fonction en JavaScript est une opération assez coûteuse, et les substitutions en ligne de petites méthodes fréquemment utilisées peuvent considérablement accélérer le code.
    • Comptage des constantes au moment de la compilation. Si l'expression dépend d'une constante, elle sera remplacée par la valeur réelle de la constante
Nous utilisons WebStorm comme environnement de développement de client Web.

Pour l'analyse de code, nous utilisons SonarQube, où nous intégrons des analyseurs de code statiques. Avec l'aide d'analyseurs, nous surveillons la dégradation de la qualité du code source JavaScript et essayons de l'empêcher.

Quelles tâches avons-nous/résolvons-nous ?

Au cours de la mise en œuvre du projet, nous avons été confrontés à un certain nombre de tâches intéressantes que nous avons dû résoudre.

Echange de données avec le serveur et entre fenêtres

Il existe des situations où l'obscurcissement du code source peut interférer avec le fonctionnement du système. Le code externe au code exécutable du client Web, en raison de l'obscurcissement, peut avoir des noms de fonctions et de paramètres qui diffèrent de ceux attendus par notre code exécutable. Le code externe pour nous est :
  • Code provenant du serveur sous forme de structures de données
  • Code pour une autre fenêtre d'application
Pour éviter toute confusion lors de l'interaction avec le serveur, nous utilisons la balise @expose :

/** * @constructor * @extends (Base.SrvObject) */ Srv.Core.GenericException = function () ( /** * @type (string) * @expose */ this.descr; /** * @type (Srv.Core.GenericException) * @expose */ this.inner; /** * @type (string) * @expose */ this.clsid; /** * @type (boolean) * @ex pose */ this. encodé ; )
Et pour éviter l'obscurcissement lors de l'interaction avec d'autres fenêtres, nous utilisons les interfaces dites exportées (interfaces dans lesquelles toutes les méthodes sont exportées).

/** * Interface exportée du contrôle DropDownWindow * * @interface * @struct */ WebUI.IDropDownWindowExp = function()() /** * Avance ou recule la sélection de 1 * * @param (boolean) isForward * @param (boolean) checkOnly * @return (boolean) * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOn ly)() /** * Déplace la sélection au début ou à la fin * * @param (boolean) isFirst * @param (boolean) checkOnly * @return (boolean) * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly)() /** * @return (boolean) * @expose */ WebUI.IDropDownWindowExp.prototype.selectValue = fonction ()()

Nous avons utilisé Virtual DOM avant qu'il ne devienne courant)

Comme tous les développeurs confrontés à des Web UI complexes, nous nous sommes vite rendu compte que le DOM n'est pas bien adapté aux interfaces utilisateur dynamiques. Presque immédiatement, un analogue du DOM virtuel a été implémenté pour optimiser le travail avec l'interface utilisateur. Pendant le traitement des événements, toutes les modifications DOM sont stockées en mémoire et, uniquement lorsque toutes les opérations sont terminées, les modifications accumulées sont appliquées à l'arborescence DOM.

Optimisation des clients Web

Pour que notre client Web fonctionne plus rapidement, nous essayons d'utiliser au maximum les fonctionnalités standard du navigateur (CSS, etc.). Ainsi, la barre de commandes du formulaire (située sur presque tous les formulaires de candidature) est dessinée exclusivement par le navigateur, mise en page dynamique basée sur CSS.

Essai

Pour les tests fonctionnels et de performance, nous utilisons un outil propriétaire (écrit en Java et C++) et une suite de tests construits sur Selenium.

Notre outil est universel - il vous permet de tester presque n'importe quel programme de fenêtre, et convient donc pour tester à la fois un client léger et un client Web. L'outil enregistre les actions de l'utilisateur qui a lancé la solution d'application 1C dans un fichier de script. Dans le même temps, des images de la zone de travail de l'écran - références - sont enregistrées. Lors de la surveillance de nouvelles versions du client Web, les scénarios sont joués sans la participation de l'utilisateur. Dans les cas où la capture d'écran ne correspond à la référence à aucune étape, le test est considéré comme ayant échoué, après quoi le spécialiste de la qualité mène une enquête - s'agit-il d'une erreur ou d'un changement prévu dans le comportement du système. En cas de comportement planifié, les normes sont automatiquement remplacées par de nouvelles.

L'outil mesure également les performances des applications avec une précision de 25 millisecondes. Dans certains cas, on boucle des parties du script (par exemple, répéter plusieurs fois la saisie de la commande) pour analyser la dégradation du temps d'exécution dans le temps. Les résultats de toutes les mesures sont enregistrés dans un journal pour analyse.


Notre outil de test et application en test

Notre outil et Selenium se complètent ; par exemple, si un bouton sur l'un des écrans a changé d'emplacement - Selenium peut ne pas le suivre, mais notre outil le remarquera, car fait une comparaison pixel par pixel de la capture d'écran avec la norme. De plus, l'outil est capable de détecter les problèmes de traitement des entrées du clavier ou de la souris, car c'est ce qu'il reproduit.

Les tests sur les deux outils (le nôtre et Selenium) exécutent des scénarios de travail typiques de nos solutions applicatives. Les tests sont automatiquement lancés après la construction quotidienne de la plateforme 1C:Enterprise. Si les scripts ralentissent (par rapport à la version précédente), nous enquêterons et corrigerons la cause du ralentissement. Notre critère est simple - le nouvel assemblage ne doit pas fonctionner plus lentement que le précédent.

Les développeurs utilisent différents outils pour enquêter sur les incidents de ralentissement ; principalement utilisé est Dynatrace AJAX Edition de DynaTrace. Les logs de l'exécution de l'opération problématique sur le précédent et sur le nouveau montage sont enregistrés, puis les logs sont analysés. Dans le même temps, le temps d'exécution d'opérations uniques (en millisecondes) peut ne pas être un facteur décisif - des processus de service tels que la récupération de place sont périodiquement lancés dans le navigateur, ils peuvent se chevaucher avec le temps d'exécution des fonctions et déformer l'image. Des paramètres plus pertinents dans ce cas seraient le nombre d'instructions JavaScript exécutées, le nombre d'opérations atomiques sur le DOM, etc. Si le nombre d'instructions/opérations dans le même scénario dans nouvelle version augmenté - cela signifie presque toujours une baisse des performances qui doit être corrigée.

En outre, l'une des raisons de la baisse des performances peut être que le compilateur de fermeture de Google, pour une raison quelconque, n'a pas pu effectuer de substitution en ligne de la fonction (par exemple, parce que la fonction est récursive ou virtuelle). Dans ce cas, nous essayons de remédier à la situation en réécrivant le code source.

Extensions de navigateur

Dans le cas où une solution appliquée nécessite une fonctionnalité qui n'est pas en JavaScript, nous utilisons des extensions de navigateur :
  • travailler avec des fichiers
  • travailler avec la cryptographie
  • travailler avec des composants externes
Nos extensions se composent de deux parties. La première partie est ce qu'on appelle une extension de navigateur (généralement des extensions JavaScript pour Chrome et Firefox) qui interagissent avec la deuxième partie, une extension binaire qui implémente la fonctionnalité dont nous avons besoin. Il convient de mentionner que nous écrivons 3 versions d'extensions binaires - pour Windows, Linux et MacOS. L'extension binaire est fournie dans le cadre de la plate-forme 1C:Enterprise et se trouve sur le serveur d'application 1C. La première fois qu'il est appelé depuis le client Web, il est téléchargé sur l'ordinateur client et installé dans le navigateur.

Lors de l'exécution dans Safari, nos extensions utilisent NPAPI, lors de l'exécution dans Internet Explorer- Technologie ActiveX. Microsoft Edge ne prend pas encore en charge les extensions, le client Web est donc limité.

La poursuite du développement

L'un des groupes de travail de l'équipe de développement du client Web est la poursuite du développement Fonctionnalité. La fonctionnalité du client Web doit être identique à la fonctionnalité du client léger, toutes les nouvelles fonctionnalités sont implémentées simultanément dans le client léger et le client Web.

Les autres tâches sont le développement de l'architecture, la refactorisation, l'amélioration des performances et de la fiabilité. Par exemple, l'une des directions est la poursuite de l'évolution vers un modèle de travail asynchrone. Une partie des fonctionnalités du client Web repose actuellement sur un modèle d'interaction synchrone avec le serveur. Le modèle asynchrone gagne désormais en pertinence dans les navigateurs (et pas seulement dans les navigateurs), ce qui oblige à modifier le client web en remplaçant les appels synchrones par des appels asynchrones (et refactoriser le code en conséquence). La transition progressive vers un modèle asynchrone s'explique par la nécessité de prendre en charge les solutions publiées et de les adapter progressivement.

Balises : Ajouter des balises