DaJet.Metadata

Library to read 1C:Enterprise 8 metadata from Microsoft SQL Server or PostgreSQL databases.


Keywords
License
MIT
Install
Install-Package DaJet.Metadata -Version 4.1.1

Documentation

dajet-metadata

Library to read 1C:Enterprise 8 metadata from Microsoft SQL Server or PostgreSQL database.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для чтСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π‘Π£Π‘Π”.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Microsoft SQL Server ΠΈ PostgreSQL.

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ вСрсии 3.2.0 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ большС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Новая вСрсия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 4.0 находится здСсь

ВрСбуСтся установка .NET Core 3.1, Π°, начиная с вСрсии 3.2.0, .NET 6.0.

NuGet package & Канал Telegram

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ 1Π‘ для выполнСния тСстов

ΠšΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π‘Π£Π‘Π”.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ свойств ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
using DaJet.Metadata;
using DaJet.Metadata.Model;

static void Main(string[] args)
{
    string csPostgres = "Host=127.0.0.1;Port=5432;Database=MY_1C_DATABASE;Username=postgres;Password=postgres;";
    string csSqlServer = "Data Source=MY_DATABASE_SERVER;Initial Catalog=MY_1C_DATABASE;Integrated Security=True";

    IMetadataService metadataService = new MetadataService();

    #region "PostgreSQL"

    // Настройки для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ PostgreSQL
    metadataService.
        .UseConnectionString(csPostgres)
        .UseDatabaseProvider(DatabaseProviders.PostgreSQL);

    // 1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ чтСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘
    InfoBase infoBase = metadataService.LoadInfoBase();
    
    // 2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ чтСния свойств ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘
    ConfigInfo config = metadataService.ReadConfigurationProperties();

    // 3. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ дополнСния справочника "НомСнклатура" свойствами ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    MetadataObject catalog = infoBase.Catalogs.Values
                                 .Where(i => i.Name == "НомСнклатура")
                                 .FirstOrDefault();

    if (catalog == null)
    {
        Console.WriteLine("Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ \"НомСнклатура\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½!");
        return;
    }

    Console.WriteLine("Бвойства справочника Π΄ΠΎ обогащСния ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….");
    Console.WriteLine(catalog.Name + " (" + catalog.TableName + "):");
    foreach (MetadataProperty property in catalog.Properties)
    {
        Console.WriteLine(" - " + property.Name + " (" + property.DbName + ")");
    }

    // ВыполняСм сравнСниС ΠΈ объСдинСниС с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π‘Π£Π‘Π”
    metadataService.EnrichFromDatabase(catalog);

    Console.WriteLine("Бвойства справочника послС обогащСния ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….");
    Console.WriteLine(catalog.Name + " (" + catalog.TableName + "):");
    foreach (MetadataProperty property in catalog.Properties)
    {
        Console.WriteLine(" - " + property.Name + " (" + property.DbName + ")");
    }

    #endregion

    #region "Microsoft SQL Server"

    // Настройки для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Microsoft SQL Server
    metadataService.
        .UseConnectionString(csSqlServer)
        .UseDatabaseProvider(DatabaseProviders.SQLServer);

    // Всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ€ΠΎΠ²Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ для PostgreSQL

    #endregion
}
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ свойств ΠΈ ΡƒΠ·Π»ΠΎΠ² ΠΏΠ»Π°Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π°
using DaJet.Metadata;
using DaJet.Metadata.Model;
using DaJet.Metadata.Mappers;

static void Main(string[] args)
{
    string connectionString = "Data Source=MY_DATABASE_SERVER;Initial Catalog=MY_1C_DATABASE;Integrated Security=True";

    IMetadataService metadataService = new MetadataService();

    metadataService.
        .UseConnectionString(connectionString)
        .UseDatabaseProvider(DatabaseProviders.SQLServer);

    InfoBase infoBase = metadataService.LoadInfoBase();

    // Находим ΠΏΠ»Π°Π½ ΠΎΠ±ΠΌΠ΅Π½Π° (ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ) ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ 1Π‘
    Publication publication = infoBase.Publications.Values
                                  .Where(i => i.Name == "Π’Π΅ΡΡ‚ΠΎΠ²Ρ‹ΠΉΠŸΠ»Π°Π½ΠžΠ±ΠΌΠ΅Π½Π°")
                                  .FirstOrDefault();

    if (publication == null)
    {
        Console.WriteLine("План ΠΎΠ±ΠΌΠ΅Π½Π° \"Π’Π΅ΡΡ‚ΠΎΠ²Ρ‹ΠΉΠŸΠ»Π°Π½ΠžΠ±ΠΌΠ΅Π½Π°\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½!");
        return;
    }

    // Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ экзСмпляр класса для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ»Π°Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π°
    PublicationDataMapper mapper = new PublicationDataMapper();
    mapper.UseDatabaseProvider(metadataService.DatabaseProvider);
    mapper.UseConnectionString(metadataService.ConnectionString);

    // Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΡƒΠ·Π»Ρ‹ ΠΏΠ»Π°Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π° (подписчиков)
    mapper.SelectSubscribers(publication);

    // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± "этом ΡƒΠ·Π»Π΅" (ΠΈΠ·Π΄Π°Ρ‚Π΅Π»Π΅)
    // Код 1Π‘: ΠŸΠ»Π°Π½Ρ‹ΠžΠ±ΠΌΠ΅Π½Π°.Π’Π΅ΡΡ‚ΠΎΠ²Ρ‹ΠΉΠŸΠ»Π°Π½ΠžΠ±ΠΌΠ΅Π½Π°.Π­Ρ‚ΠΎΡ‚Π£Π·Π΅Π»()
    Console.WriteLine(string.Format("Publisher: ({0}) {1}",
        publication.Publisher.Code,
        publication.Publisher.Name));

    // Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΠ·Π»Π°Ρ… ΠΏΠ»Π°Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π° (подписчиках)
    Console.WriteLine("Subscribers:");
    foreach (Subscriber subscriber in publication.Subscribers)
    {
        Console.WriteLine(string.Format(" - ({0}) {1} [{2}]",
            subscriber.Code,
            subscriber.Name,
            subscriber.IsMarkedForDeletion ? "x" : "+"));
    }
}
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сравнСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π‘Π£Π‘Π” для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘
using DaJet.Metadata;
using DaJet.Metadata.Model;

static void Main(string[] args)
{
    string connectionString = "Data Source=MY_DATABASE_SERVER;Initial Catalog=MY_1C_DATABASE;Integrated Security=True";

    IMetadataService metadataService = new MetadataService();

    metadataService.
        .UseConnectionString(connectionString)
        .UseDatabaseProvider(DatabaseProviders.SQLServer);

    InfoBase infoBase = metadataService.LoadInfoBase();

    // Находим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π‘Π£Π‘Π”
    Publication publication = infoBase.Publications.Values
                                  .Where(i => i.Name == "Π’Π΅ΡΡ‚ΠΎΠ²Ρ‹ΠΉΠŸΠ»Π°Π½ΠžΠ±ΠΌΠ΅Π½Π°")
                                  .FirstOrDefault();

    if (publication == null)
    {
        Console.WriteLine("План ΠΎΠ±ΠΌΠ΅Π½Π° \"Π’Π΅ΡΡ‚ΠΎΠ²Ρ‹ΠΉΠŸΠ»Π°Π½ΠžΠ±ΠΌΠ΅Π½Π°\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½!");
        return;
    }

    List<string> delete_list; // Бписок "Π»ΠΈΡˆΠ½ΠΈΡ…" - Π΅ΡΡ‚ΡŒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘, Π½ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
    List<string> insert_list; // Бписок "Π½ΠΎΠ²Ρ‹Ρ…" - Π΅ΡΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅Ρ‚ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘
    bool result = metadataService.CompareWithDatabase(publication, out delete_list, out insert_list);
}

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° для чтСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… (свойств ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ)

Бсылка для скачивания

ΠŸΠΎΠΌΠΎΡ‰ΡŒ ΠΏΠΎ использованию:

ΠŸΠΎΠΌΠΎΡ‰ΡŒ ΠΏΠΎ использованию

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования для Microsoft SQL Server:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования dajet cli для Microsoft SQL Server

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования для PostgreSQL:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования dajet cli для PostgreSQL

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π² случаС нСобходимости ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚ для PostgreSQL адрСс сСрвСра ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ: 127.0.0.1:5432