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:
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ PostgreSQL:
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΡΡ Π΄Π»Ρ PostgreSQL Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ: 127.0.0.1:5432