Chaîne de connexion à une source de données externe 1c. Sources de données externes

Dans la version 8 du programme 1C, les développeurs ont ajouté à la fonctionnalité la possibilité de connecter des bases de données tierces et d'en obtenir des informations directement à partir du configurateur, sans utiliser de connexions COM ni d'objets OLE. Cette fonctionnalité est implémentée à l'aide d'un nouvel objet - « Sources de données externes »

Les sources de données externes dans 1C peuvent être utilisées de la même manière que les autres tables du système :

  1. Lors de la création de rapports et de calculs à l'aide d'un système de composition de données (DCS) ;
  2. Pour obtenir des liens vers des informations stockées dans des sources tierces ;
  3. Pour modifier les données stockées dans les tableaux ;
  4. Lors de la génération de demandes.

Il est important de savoir que ce mécanisme n'est pas conçu pour fonctionner avec d'autres bases de données 1C, puisque le modèle opérationnel 1C.Enterprise lui-même n'implique pas d'interférence avec les données au niveau des tables physiques.

Créer une nouvelle source

L'ajout d'une nouvelle source externe au programme s'effectue en mode « Configurateur ». Il existe une branche correspondante dans l'arborescence de configuration (Fig. 1)

Vous devrez travailler dur lors de la création d'une nouvelle source, malgré le fait que le formulaire du nouvel objet ne comporte que quatre onglets :

  1. Basique;
  2. Données;
  3. Les fonctions;
  4. Droits.

Le premier onglet n'a qu'un seul paramètre intéressant : le mode de contrôle du verrouillage. Si vous n'avez aucune question sur le blocage des données dans les transactions ou sur les subtilités de la parallélisation des flux d'informations, vous pouvez laisser cette option en mode de blocage automatique. Cependant, une telle approche peut conduire à des restrictions excessives (par exemple, lorsqu'au lieu d'un enregistrement séparé, le programme verrouille l'intégralité de la table physique, privant ainsi les autres utilisateurs de la possibilité de travailler avec elle).

Les verrous gérés, contrairement aux verrous automatiques, utilisent le mécanisme de transaction inhérent au programme lui-même, et non au SGBD, ce qui permet de transférer les captures de tables à un niveau beaucoup plus bas.

En définissant ce paramètre sur « Automatique et géré », nous offrons au système la possibilité de déterminer le mode à utiliser en accédant directement à une propriété similaire pour chaque table spécifique.

Onglet « Données » du formulaire de propriétés de la source externe

La forme de l'onglet « Données » est illustrée à la Fig. 2

Riz. 2

Ici, nous pouvons ajouter des tables et des cubes sources externes. Il existe deux manières d'ajouter une table :

  1. Manuellement, alors le formulaire d'ajout de table s'ouvrira devant nous (Fig. 3) ;

Riz. 3

  1. Ou sélectionnez dans la liste des tables sources physiques (Fig. 4), auquel cas un constructeur spécial s'ouvre devant nous.

Riz. 4

Regardons de plus près le formulaire d'ajout d'une table. La propriété « Nom » permet d'identifier de manière unique un objet dans la configuration.

La comparaison de l'objet de métadonnées et de la table physique finale s'effectue via la propriété « Nom dans la source de données » située dans l'onglet « Avancé » (Fig. 5).

Riz. 5

Il faut ensuite déterminer le type du tableau, ou plutôt son objectivité. Si les données stockées dans une structure peuvent être identifiées de manière unique via n'importe quel champ, la table peut être une table d'objet. Si l'individualité d'un enregistrement est déterminée par un ensemble de champs clés, la table doit avoir un type non-objet.

En comparant ces tables avec d'autres objets de métadonnées, l'analogie suivante peut être donnée :

  • Les tables d'objets sont des ouvrages de référence ;
  • Les non-objets sont des registres d'informations.

L'ensemble des champs clés est défini dans le paramètre suivant du formulaire (« Champs clés »). Ce champ est obligatoire ; si vous le laissez vide, l'enregistrement de la configuration échouera.

Comme le montre la figure 5, certains champs et boutons du formulaire ne sont pas modifiables :

  • Expression dans la source de données ;
  • Type de données du tableau ;
  • Champ de présentation ;
  • Afficher les gestionnaires.

Ils ne peuvent être utilisés qu'après avoir rempli les champs du tableau, défini leur type et leur attribuant des identifiants (Fig. 6)

Riz. 6

Ici, vous devez faire attention au paramètre «Autoriser Null» : si cette case est cochée, il est déconseillé d'utiliser un tel champ comme clé.

Constructeur de tableaux

Le point le plus important et le plus intéressant dans le travail avec des sources externes est peut-être la création d'une chaîne de connexion. Son constructeur s'ouvre si vous cliquez sur le bouton à trois points à côté du paramètre « Chaîne de connexion ».

Tout d'abord, il nous sera demandé de décider du driver qui sera utilisé pour la connexion (Fig. 7)

Riz. 7

Une définition incorrecte de ce paramètre ne vous permettra pas de vous connecter à une infobase tierce. Vous devez également comprendre que tous les pilotes spécifiés dans la liste déroulante ne peuvent pas être utilisés pour générer automatiquement une chaîne de connexion. Si la plateforme génère une erreur (Fig. 8), alors la chaîne de connexion devra être saisie manuellement.

Figure 8

Riz. 9

La ligne elle-même est une construction strictement réglementée.

Exemple de chaîne de connexion

Considérons une base de données tierce créée dans Microsoft Access et située à la racine du lecteur D. Pour connecter cette base de données, nous devons utiliser le pilote approprié, mais sa sélection dans le constructeur de lignes entraîne l'erreur Fig. 8.

Nous définirons nous-mêmes les paramètres de connexion.

Driver=(Microsoft Access Driver (*.mdb)) – voici à quoi ressemble la première partie de la ligne. Entre accolades, nous avons défini le pilote.

Pour les fichiers Excel, cela ressemblera à (Microsoft Excel Driver (*.xls)), pour les fichiers Excel créés dans un bureau antérieur à 2003, la ligne du pilote ressemblera à (Microsoft Excel Driver (*.xls, *.xlsx, *. xlsm, *.xlsb)).

En séparant ce paramètre du suivant par une virgule, nous devons saisir l'adresse de notre stockage (dans notre cas DBQ=D:\Database1.mdb).

En ajoutant ces deux paramètres, on obtient Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb. En écrivant ce paramètre, on accède aux structures internes de cette base de données.

Pour l'objet « Source Externe », il ne suffit pas de le créer dans la configuration, il faut aussi le connecter en mode « Entreprise ». Cela peut être fait à partir du menu « Toutes les fonctions » -> Sources externes. Lorsque nous entrons pour la première fois dans notre table, nous devons saisir la même chaîne de connexion en mode « Entreprise ».

Dans la version 8.3.5.1068 de la plateforme (et versions ultérieures), il est devenu possible d'ajouter, de modifier et de supprimer des données dans des sources externes à l'aide du logiciel 1C. Des exemples de cette fonctionnalité sont présentés dans cet article.

Pour rendre possible l'enregistrement sur des sources externes, la société 1C a ajouté de nouvelles propriétés aux tables de données et aux champs des sources externes :

  • Pour toute la table - propriété Seule la lecture. Lecture seule = Vrai signifie que modifier les données de ce tableau est impossible ;
  • Pour les champs de table individuels - propriétés Seule la lecture, Permettre null Et Valeur de remplissage:
    • Lecture seule = Vrai signifie que la modification des données dans ce champ est impossible ;
    • AllowNull = Vrai signifie qu'une valeur peut être écrite dans ce champ NUL;
    • Valeur de remplissage contient la valeur par défaut de ce champ (s'il existe).

Vous (lors de la description manuelle des tables) ou la plateforme (lors de la création de tables à l'aide d'un concepteur) pouvez utiliser ces propriétés comme suit.

  • Lecture seule = Vrai définir, par exemple, pour les vues, les tableaux obtenus sur la base d'une expression (résultat de fonction), etc. Les données de ces tableaux ne peuvent pas être modifiées ;
  • Lecture seule = Vrai spécifier pour les champs définis automatiquement ( INCRÉMENTATION AUTOMATIQUE), champs calculés, etc. Les données dans ces champs ne peuvent pas être modifiées ;
  • AllowNull = Vrai défini pour tous les champs, à l'exception des champs clés et de ceux décrits dans une source externe comme PAS NUL;
  • Valeur de remplissage les champs doivent être définis dans le cas où la source externe précise la valeur standard de ce champ (valeur DÉFAUT).

Vous pouvez ajouter, modifier et supprimer des données dans des sources externes à l'aide du langage intégré ou de manière interactive. Le langage intégré utilise pour cela les méthodes de gestion de tables suivantes :

  • CreateRecordSet()- pour les tables non-objets ;
  • Nouvelle méthode CréerObjet()- pour les tables d'objets.

En conséquence, les objets ExternalDataSourceTableRecordSet Et ExternalDataSourceTableObject de nouvelles méthodes sont apparues Écrire() Et Supprimer().

Ajout de données

Lorsque vous ajoutez des données à une source externe, vous créez un objet (ou un jeu d'enregistrements), définissez les valeurs des champs et écrivez. Cependant, certaines fonctionnalités sont utiles à connaître.

Par exemple, si vous essayez de définir la valeur d'un champ qui a Lecture seule = Vrai, une erreur sera générée. Et lors de l'écriture directement dans la base de données dans l'expression INSÉRER ces champs seront ignorés. Les champs restants contiennent les valeurs que vous leur avez attribuées. Donc les valeurs Nul et les valeurs par défaut doivent être attribuées explicitement aux champs.

  • identifiant(AutoriserNull = Vrai) ;
  • nom(AutoriserNull = Vrai) ;
mFeature = ExternalDataSources.TableIm.shop_feature.CreateObject(); mCharacteristic.id = Code ; mCharacteristic.name = Nom ; mCharacteristic.Write();

Exécution de la déclaration Écrire() entraînera l'appel du gestionnaire d'événements en premier Avant l'enregistrement, puis une écriture physique dans la table source externe est effectuée ( INSÉRER), alors le gestionnaire d'événements sera appelé QuandEnregistrement.

Vous pouvez effectuer les opérations suivantes avec le champ clé de la table source externe. Si un champ clé est modifiable, vous définissez alors « manuellement » sa valeur avant d'écrire. Si la modification du champ clé est interdite, la plateforme recevra indépendamment la clé dans INSÉRER ou immédiatement après. Vous pouvez interférer avec ce processus en utilisant la méthode DéfinirLienNouveau() avant l'enregistrement physique (dans le gestionnaire d'événements Avant l'enregistrement) ou immédiatement après l'enregistrement physique (dans le gestionnaire d'événements QuandEnregistrement).

Modification des données

Lorsque les données changent, les valeurs de tous les champs de table qui ont Lecture seule = Faux.

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",code); mObject = mCharacteristic.GetObject(); mObject.name = Nom ; mObject.Write();

Si vous devez enregistrer uniquement certains champs, vous pouvez en spécifier une liste directement depuis le langage intégré en utilisant les méthodes SetWritableFields() Et GetWrittenFields().

Suppression de données

La suppression de données supprime directement une ligne d'une table de base de données. Dans ce cas, la recherche des références à l'objet en cours de suppression n'est pas effectuée. Si une telle fonctionnalité est nécessaire, vous pouvez la programmer vous-même dans le gestionnaire d'événements AvantSupprimer().

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",Code); mObject = mCharacteristic.GetObject(); mObject.Delete();

Transactions

La lecture des données provenant de sources externes, comme auparavant, s'effectue en dehors d'une transaction, et lors de l'écriture, la plateforme ouvre une transaction implicite. En même temps, vous pouvez effectuer à la fois la lecture et l'écriture dans des transactions explicites à l'aide de méthodes objet. ExternalDataSourceManager:

  • DémarrerTransaction();
  • CommitTransaction();
  • Annuler la transaction().

Serrures

  • Auto;
  • Géré;
  • Automatique et contrôlé.

ainsi que la propriété de la table source externe Niveau d'isolement des transactions:

De plus, vous pouvez définir indépendamment le niveau de verrouillage dans la méthode DémarrerTransaction().

J'ai ajouté des exemples à l'article standard) Si j'ai plus de temps, j'ajouterai d'autres exemples.

La release 8.2.14.533 est enfin une version plus ou moins stable de la 14ème release de la plateforme. Finalement, l'opportunité s'est présentée d'essayer une merveilleuse opportunité : les « sources de données externes ».

Pourquoi cette opportunité présente-t-elle un tel intérêt ? Toute personne ayant programmé en 1C et connaissant bien SQL et au moins généralement familiarisée avec l'architecture et les principes de développement d'autres plates-formes technologiques pour les applications métiers vous dira en toute confiance ce qu'elle aime le plus dans 1C. Bien entendu, le générateur de requêtes est le mécanisme le plus pratique et le plus réfléchi pour écrire des requêtes permettant de récupérer des données à partir de structures relationnelles que j'ai personnellement jamais rencontré. Et maintenant, 1C nous a donné une merveilleuse opportunité de l'utiliser non seulement avec 1C, mais aussi avec n'importe quelle autre table. C'est juste que ce « baril de miel » a beaucoup de « mouches dans la pommade ». Tout d'abord:

1) Configuration et utilisation - sans « danser avec un tambourin », cela ne fonctionnera pas

A) Ajouter une source de données externe – cela ne semble pas compliqué
b) cochez la case « Sélectionner dans la liste » - obligatoire - cela est nécessaire pour vérifier la fonctionnalité au début et vous évitera des problèmes inutiles
V)
(IMG : http://pics.livejournal.com/comol/pic/0000cr1r.png)
- assurez-vous de cliquer sur "..." - la connexion est ODBC. Pas OLEDB comme nous en avons tous l'habitude, mais un niveau inférieur

Mais sois là TRÈS ATTENTIONNÉ.

Il s'agit d'un pilote ODBC - si vous utilisez la version client-serveur, il doit être sur le serveur. Si vous développez sur un système et travaillez sur un autre (comme c'est généralement le cas), assurez-vous qu'aucune surprise ne vous attend. Une recommandation étrange, mais choisissez le pilote le plus ancien ou le plus courant si vous n'êtes pas particulièrement préoccupé par la vitesse et n'avez pas l'intention d'aller au-delà des capacités de la norme SQL92. Cela vous donnera une meilleure compatibilité. Par exemple, pour SQL Server 2008, le meilleur pilote sera SQL Server Native Client 11, mais je recommande de choisir uniquement SQL Server, sinon ce client très natif devra être installé soit sur le serveur, soit sur toutes les machines clientes (si vous utilisez le version du fichier), et l'avantage est particulier car simple, il ne vous confiera aucune tâche.

E) Boîtes de dialogue de sélection de serveur standard

G) Sélectionnez le tableau et les détails... une merveilleuse opportunité - vous pouvez immédiatement le renommer comme vous le souhaitez (et les détails aussi), et dans les propriétés, vous verrez les noms des champs de la source de données

Z) Maintenant que vous le lancez, ouvrez le concepteur de requêtes - sélectionnez bêtement tous les enregistrements de la table et OPA - une erreur. Ce qu'il faut faire? Si vous disposez d'une interface gérée, regardez le menu de service, et s'il s'agit d'une interface standard...
J'ai personnellement utilisé ce code :

Paramètres = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = True ;
Paramètres.UserName = "sa" ;
Paramètres.Mot de passe = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Paramètres.DBMS = "MSSQLServer" ;

ExternalDataSources.DAX.SetCommonConnectionParameters(Paramètres);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();

Certaines pièces ne sont peut-être pas nécessaires, mais cela fonctionne. Vous devez exécuter le code UNE FOIS. Après quoi, il sera normal de se connecter... le mysticisme bien sûr - pourquoi cela était nécessaire n'est pas clair...

2) Sources de données en lecture seule
Oui, les miracles ne se produisent pas... mais parfois on le souhaite ainsi...

3) ILS NE PEUVENT PAS ÊTRE UTILISÉS AVEC DES SOURCES DE DONNÉES INTERNES
Personnellement, ce fait m'a tué sur le coup.

Comment peut-il en être ainsi... ce que nous attendions et avons déjà imaginé et léché nos lèvres sur la façon dont nous allons maintenant combiner nos données avec 1C en une seule requête, les réduire - les regrouper, les insérer dans le rapport, mais ce n'est pas le cas cas...

Mais bien sûr, cela n’arrête pas les personnes expérimentées… quelle pensée vous est venue à l’esprit ? C'est vrai - tables temporaires :

4) ILS NE PEUVENT PAS ÊTRE UTILISÉS AVEC DES TABLES TEMPORAIRES

Mais cela ne ressemble plus à des difficultés technologiques, mais ressemble beaucoup à ce qu’ils veulent que nous fassions « pour que la vie ne ressemble pas au paradis » (IMG :).

5) Ne peut être utilisé que dans les connexions ACS

Pour ceux qui ne le savent pas, cela se trouve dans l’ACS dans l’onglet « Liens vers les ensembles de données ». Les utilisez-vous souvent ? Confortable? Apparemment, ils veulent nous forcer à les utiliser plus souvent. Seulement il y a une colonne « Condition de communication » et « Paramètre de communication ». Je n'ai trouvé aucun exemple de leur utilisation dans une configuration standard, et d'une manière ou d'une autre, tout n'est pas non plus transparent dans la documentation et dans le travail de Khrustaleva. Quelqu'un peut-il m'expliquer comment fonctionne la "condition de connexion". Si vous y écrivez Source Attributes = Receiver Attributes, cela ne fonctionne pas. Bien sûr, la condition peut être écrite dans le champ « Expression » - dans la plupart des cas, cela suffit... mais d'une manière ou d'une autre, cela ne fonctionne pas très facilement.

Au total, ce problème a déjà été résolu quelque part comme ceci :

Fonction InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value ;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value ;
Si DataCon > "20100101" Alors
DataCon = "20100101" ;
fin si;

CN = Nouveaux numéros de qualifications (15,2);
KS = NewStringQualifiers(255);

ArrayNumber = Nouveau tableau ();
ArrayNumber.Add(Type("Nombre"));

ArrayString = Nouveau tableau ();
ArrayString.Add(Type("String"));

ArrayData = Nouveau tableau ();
ArrayDate.Add(Type("Date"));

//Nous renseignerons le coût comptable dans le tableau
TypeNumber = Nouveaux DescriptionTypes (ArrayNumber, CN);
TypeString = Nouveau TypeDescription (ArrayString, KS) ;
TypeDate = Nouveau TypeDescription (ArrayDate);

//table pour charger les données depuis SQL
TZ = Nouveau ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Quantité", TypeNumber);
TK.Columns.Add("Période", DateType);

TK.Indices.Add("Période");

//Connectez-vous à SQL
Chaîne de connexion = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Chiffrement des données=False ;Étiquette avec classement des colonnes lorsque cela est possible=False;Catalogue initial=Rapports" ;
Connexion = Nouveau COMObject("ADODB.Connection");
Commande = Nouveau COMObject("ADODB.Command");
RecordSet = Nouveau COMObject("ADODB.RecordSet");
Date = "" ;
Tentative
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Connexion ;
Command.CommandText = "Sélectionnez * à partir de PH où période >= "" + String(Format(DateStart, "DF=aaaaMMjj")) + "" et période RecordSet = Command.Execute();
RecordSet.MoveFirst();
Exception
Retour des spécifications techniques ;
FinTentative ;

Tandis que RecordSet.EOF = False Loop
Ligne = TZ.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
Fin du cycle ;

Demande = Nouvelle demande ();
VrTable = Nouveau TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Date de début", Date de début);
Request.SetParameter("DataCon", DateCon);
Requête.Texte = "SELECT
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Période
|Placer la table de données
|DE
| &vDataTable AS vrDataTable
|OÙ
| vrDataTable.Period >= &DateStart
| Et vrDataTable.Period Query.Execute();
TZ = Non défini ;

Demande = Nouvelle demande ;
Query.TemporaryTableManager = VrTable ;
Query.Text = "Voici une requête impliquant une table de variables";

Résultat = Query.Run();
Retourner le résultat ;

FinFonction

ExternalSet = InitializeDataSource();
DataSet = nouvelle Structure();
DataSet.Insert("Table SQL", ExternalSet);
TypiqueReports.GenerateTypicalReport (ThisObject, Résultat, Données de décryptage, OutputToReportForm, DataSet);

En fait, il n'y a pas beaucoup de lignes de code et elles sont assez standards... dans ce cas, vous pouvez utiliser toutes les fonctionnalités du concepteur de requêtes, et donner uniquement la fonction DATA COMPOSITION à l'ACS

Mais cela n'a certainement pas l'air aussi joli... et à chaque fois que vous devez écrire du code pour télécharger des valeurs dans un tableau et vérifier si vous avez fait une erreur dans le nom des détails... et ce qui nous a été donné 1C semble en quelque sorte sans enthousiasme. Je n'ai pas encore décidé lequel est le plus pratique à utiliser. Vous décidez et écrivez sur vos décisions et ce qui vous y a poussé.

[vous devez vous inscrire pour voir le lien]

Travaillez avec eux dans des listes en mode 1C Enterprise.

Cependant, au travail, il arrive souvent qu'une partie des données soit stockée ailleurs.

  • Boutique en ligne (stocke généralement les données dans une base de données MySQL/SQL externe)
  • Une autre base.

Pour travailler avec de telles données stockées dans d'autres bases de données, des mécanismes spéciaux doivent être développés.

Dans la version 1C 8.2.14, une nouvelle est apparue appelée 1C External Data Sources, qui facilite grandement le travail du programmeur, puisque :

  • il n'est désormais plus nécessaire de créer des mécanismes spéciaux pour obtenir des données
  • ces données sont accessibles de la manière habituelle
  • ces données peuvent être consultées dans les listes 1C.
    • Source de données externe 1C – base de données SQL externe

      Disons que nous disposons d'une base de données SQL dans laquelle sont stockées les données dont nous avons besoin. Essayons d'en lire les données à l'aide du mécanisme de source de données externe 1C.

      Ajoutons une source de données 1C externe. Il faut se rendre dans le configurateur, les sources de données externes se trouvent dans la fenêtre de configuration, tout en bas de l'arborescence.

      1. Connexion

      Ajoutons une nouvelle source de données externe 1C, nommez-la arbitrairement.

      La base de données est constituée de tables. Nous devons les ajouter dans la source de données externe ajoutée. Faites un clic droit dessus et sélectionnez Ajouter une table.

      La première fois, il vous sera demandé de fournir une chaîne de connexion. Il peut être saisi manuellement, ou généré en cliquant sur le bouton «…».

      Dans notre cas spécifique, nous sélectionnerons « SQL Server » comme pilote

      Remplissons les paramètres de base pour la connexion à SQL. Le nom du serveur peut être saisi ou sélectionné dans la liste.

      1C se connectera à SQL et proposera de sélectionner une base de données spécifique dans la liste.

      Après cela, 1C affichera une liste des tables de cette base de données et leurs colonnes. Vous devez cocher les cases pour sélectionner les tables requises.

      Des tableaux et des colonnes seront ajoutés. Les noms seront les mêmes que ceux définis dans la base de données distante. En 1C vous pouvez les renommer (dans les propriétés).

      Voici un exemple du tableau ajouté :

      Voici un exemple de colonne ajoutée :

      Pour que la plateforme 1C fonctionne avec une table externe de la même manière qu'avec les annuaires 1C, vous pouvez spécifier des paramètres supplémentaires dans la table :

      • Dans la propriété Key Field, spécifiez l'une des colonnes qui fournira une identification unique de la ligne ; si plusieurs lignes assurent l'unicité, alors cette méthode ne fonctionne pas (analogue au champ Code)
      • Dans la propriété Champ de présentation, spécifiez l'une des colonnes qui fournira une brève représentation de la ligne (analogue au champ Nom)
      • Dans la propriété Type de données de table, spécifiez les données d'objet.

      2. Voir

      La connexion à la base distante ne se fait pas automatiquement. Pour vous connecter, vous devez sélectionner un menu standard.

      Dans la branche Standard, il existe une commande spéciale Gestion des sources de données externes, qui permet de spécifier les paramètres de connexion (spécifiques au mode 1C Enterprise) et d'établir une connexion.

      Vous devez d'abord spécifier les paramètres de connexion à la base de données.

      Lorsque vous avez effectué les réglages dans le configurateur, celui-ci vous a montré la chaîne de connexion. Vous pouvez le revoir en cliquant à nouveau sur Ajouter une table dans le configurateur.

      Copiez la chaîne de connexion et spécifiez-la en mode 1C Enterprise.

      Après cela, vous devez établir la connexion réelle.

      Une fois la connexion établie, il est possible de travailler avec des listes.

      3. Utilisation en langage 1C

      La connexion peut également être établie à partir du code du programme en langage 1C.

      Les paramètres de connexion sont spécifiés comme suit :
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetGeneralConnectionParameters();

      ConnectionParameters.AuthenticationStandard = True ;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "mot de passe" ;
      ConnectionParameters.ConnectionString = « chaîne de connexion du configurateur » ;
      ConnectionParameters.DBMS = "MSSQLServer" ;

      ExternalDataSources.SourceNameConfigurator.SetGeneralConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(UserName(), Parameters);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Parameters);
      ExternalDataSources.SourceNameConfigurator.SetConnection();

      Vous pouvez interroger les données d'une base de données à l'aide d'un fichier . Un exemple de texte de requête pour une source externe OurExternalSource et des tables ExternalSource Table :

      CHOISIR
      ExternalSourceTable.FieldName
      DEPUIS
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Source de données externe 1C - travailler avec un fichier Excel

      Essayons une autre option : travailler avec un fichier Excel via une source de données 1C externe.

      Créons un simple fichier Excel.

      Ajoutons une source externe, appelons-la arbitrairement FileExcel. Ajoutons-y le tableau « Sheet1$ ». Comme vous pouvez facilement le voir, il s'agit du nom de la feuille dans Excel avec l'ajout du symbole « $ ».

      Comme dans le cas de SQL, ajoutons des colonnes. Ils peuvent être ajoutés manuellement. Il est important de vous assurer que les types de colonnes que vous ajoutez correspondent, sinon vous risquez de recevoir ultérieurement une erreur du type « Incompatibilité de type de données ».

      Pour la colonne, vous devez spécifier un nom dans 1C et un nom dans la source de données.

      Il existe une fonctionnalité pour Excel (erreur du type « Trop peu de paramètres. 3 requis ») :

      • Si la première ligne d'un tableau Excel contient des noms de colonnes, alors il vous suffit d'indiquer le nom de cette colonne, par exemple « Code ».
      • Sinon, vous devez spécifier le nom complet avec le nom de la table « Sheet1$.Code », mais ajouter « HDR=NO; » dans les paramètres.

      Les paramètres de connexion du fichier Excel ressemblent à ceci :

      • Fichiers XLSX (Office 2007 et versions ultérieures)
        Pilote=(Pilote Microsoft Excel (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • Fichiers XLS (anciennement)
        Pilote=(Pilote Microsoft Excel (*.xls)); ID du pilote = 790 ; DBQ=D:\FileExcel.xls ;
        Vous devez spécifier votre propre nom et chemin d'accès au fichier.

Sources de données externes 1C - un objet de métadonnées relativement nouveau 1C 8.3 et 8.2, avec lequel il est possible de se connecter à des sources de données externes 1C : tables SQL, Excel, Access, FoxPro (dbf), une autre base de données 1C, Oracle, Paradox (db) , - et même la lecture à partir de simples fichiers txt/csv.

Cela donne de nombreuses possibilités avec d'autres systèmes. Regardons de plus près.

Mise en place de sources de données externes dans 1C 8

La configuration de sources externes est individuelle pour chaque type de système. Mais, en règle générale, la partie générale de la configuration est la même : il s'agit de définir la chaîne de connexion :

Obtenez 267 leçons vidéo sur 1C gratuitement :

Si la chaîne de connexion est spécifiée correctement, le système vous demandera de sélectionner la table souhaitée dans la base de données. En conséquence, nous obtiendrons un tableau prêt à l'emploi dans lequel nous pourrons spécifier le champ clé (un champ unique) et le champ de présentation (comment l'enregistrement sera reflété dans 1C) :

Utilisation de sources de données externes dans 1C 8.3

Les sources de données externes dans 1C peuvent être utilisées comme d'autres tables de base de données. La plateforme génère automatiquement un formulaire pour eux si aucun n'est spécifié. Il est également possible d'utiliser des données provenant de sources externes dans les requêtes.

Publications sur le sujet