рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди 1 рд╕реА рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ

рдореИрдВрдиреЗ 1C: рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП C # рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


https://github.com/elisy/MdInternals


MdInternals рдкреНрд░рд╛рд░реВрдк cf, cfu, epf, erf рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ, рдорд╛рдирд╡-рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп Xml рдФрд░ рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдирдкреИрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдЖрдВрддрд░рд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • MdInternals рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ
  • CfProject MdInternals рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдФрд░ рдбрд┐рд╕реЗрд░рд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
  • MdInternals.Cil рдбрд┐рдХрдВрдкрд╛рдЗрд▓ рдмрд╛рдЗрдЯреЗрдХреЛрдб (OpCode) 1C
  • MdInternals.Serialization рдЖрдВрддрд░рд┐рдХ рдЕрд░реНрдз-JSON рдкреНрд░рд╛рд░реВрдк 1C рдлреЙрд░реНрдо "{19 {", 2}, "" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ



рдбрд┐рд╕реНрдХ рдореЗрдВ cf, cfu, epf, erf рдлрд╛рдЗрд▓реЗрдВ рдЙрддрд╛рд░реЗрдВ


var cf = new CfPackage(); // var cf = new EpfPackage(); // var cf = new ErfPackage(); // var cf = new CfuPackage(); cf.Open(@"D:\config.cf"); var project = new CfProject(); project.Save(epf, @"D:\Config\Xml\Config.cfproj", ProjectType.Xml); 

рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЯреНрд░реА рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВред рдЕрдкрд░рд┐рдЪрд┐рдд рдХреЛ рдЕрдирд╛рд░рдХреНрд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ:




рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдлрд╛рдЗрд▓реЗрдВ XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВред XML рдкреНрд░рд╛рд░реВрдк рдЖрдкрдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд╛рд░реНрдХрд┐рдХ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬреНрдЮрд╛рдд рдЧреБрдгреЛрдВ рдХреЛ XML рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЙрдкрдпреБрдХреНрдд рд╡рд░реНрдЧреЛрдВ (рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдпрд╛ рдЯреИрдЧ) рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:





рдПрдХ MSSQL рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкрдврд╝рдирд╛


 var image = ImageReader.ReadImageFromConfig(@"data source=192.168.1.2\SQL2005;user=login;pwd=password;database=Database1C"); 


рдЖрдВрддрд░рд┐рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдирд╛


 var mp = new EpfPackage(); mp.Open(file); var root = mp.MetadataObjects.Where(m => m.ImageRow.FileName == "root").FirstOrDefault(); var rp = new RootPointer(root.ImageRow); var part = mp.MetadataObjects.Where(m => m.ImageRow.FileName == rp.MetadataPackageFileName.ToString()).FirstOrDefault(); 

рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП xml рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛


 var project = new CfProject(); var mp = project.Load(@"D:\Config\Xml\Config.cfproj"); mp.Save(@"D:\config.cf"); 

рд╕реАрдПрдл рдкреНрд░рд╛рд░реВрдк рд╡рд┐рд╡рд░рдг


рдПрдХ cf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рд╣реИрдбрд░ (ImageHeader) рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рд╣реЛрддреЗ рд╣реИрдВ (ImagePage1-ImagePageN)ред рдЫрд╡рд┐ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ 0xFF 0xFF 0xFF 0x7F, рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ 8 рдЖрд░рдХреНрд╖рд┐рдд рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЗ рдмрд╛рдж рдХреНрд░рдо рдореЗрдВ рдбреЗрдЯрд╛ рдкреГрд╖реНрда рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдЫрд▓рд╛ рдкреГрд╖реНрда рдЕрдЧрд▓реЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИред





рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда (ImagePage) рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рд╢реАрд░реНрд╖рдХ (ImagePageHeader), ImageRowPointers, рдФрд░ рдПрдХ ImageRows рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╕рдВрдХреЗрдд рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИред





ImagePageHeader рдкреГрд╖реНрда рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдЖрд░рдХреНрд╖рд┐рдд 2 рдмрд╛рдЗрдЯреНрд╕ 0x0D 0x0A, 27 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдкрд╛рдареНрдп рд╕реВрдЪрдирд╛ рдФрд░ 2 рдЖрд░рдХреНрд╖рд┐рдд рдмрд╛рдЗрдЯреНрд╕ 0x0D 0x0Aред рдкрд╛рда рдХреА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ 3 рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ: рд╕рднреА рдкреЗрдЬреЛрдВ рдХрд╛ рдХреБрд▓ рдбреЗрдЯрд╛ рдЖрдХрд╛рд░ (FullSize), рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдХрд╛ рдЖрдХрд╛рд░ (PageSize) рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдХрд╛ рдкрддрд╛ (NextPageAddress)ред FullSize рдХреЗрд╡рд▓ рдкреГрд╖реНрда рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╢реЗрд╖ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдорд╛рди 0. рд╣реИред рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП, NextPageAddress 0xFF 0xFF 0xFF 0x7F рдкрд░ рд╕реЗрдЯ рд╣реИред


ImageRowPointers рдкреЙрдЗрдВрдЯрд░ рдмреНрд▓реЙрдХ рдкреГрд╖реНрда рдХреЗ рдкреГрд╖реНрда рдЖрдХрд╛рд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рд╣реЗрдбрд░рдбреНрд░реЗрд╕ рд╣реЗрдбрд░ рдПрдбреНрд░реЗрд╕ рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рдмреЙрдбреАрдЕрдбреНрд░реЗрд╕ рдмреЙрдбреА рдПрдбреНрд░реЗрд╕ рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ 0xFF 0xFF 0xFF 0x7F рд╣реИред рдкрддреЗ ImageRows рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдХреЗ рднреАрддрд░ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред


ImageRowHeader рд╣реЗрдбрд░ ImagePageHeader рдкреЗрдЬ рд╣реЗрдбрд░ рдмреНрд▓реЙрдХ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЕрдЧрд▓рд╛ 20 рдЖрд░рдХреНрд╖рд┐рдд рдмрд╛рдЗрдЯреНрд╕, UTF-16 рдбреЗрдЯрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (Id) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ 4 рдЖрд░рдХреНрд╖рд┐рдд рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВред


ImageRowBody рдмреЙрдбреА рдХреА рд╢реБрд░реБрдЖрдд ImagePageHeader рдкреЗрдЬ рд╣реЗрдбрд░ рдмреНрд▓реЙрдХ рд╕реЗ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдмреЙрдбреА рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрджрд┐ рдбреЗрдЯрд╛ рдмреЙрдбреА 0xEF 0xBB 0xBF (рд╣рд╕реНрддрд╛рдХреНрд╖рд░ UTF8) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╢рд░реАрд░ рдореЗрдВ UTF-8 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЕрдиреНрдпрдерд╛, рдбреЗрдЯрд╛ рдмреЙрдбреА рдореЗрдВ рдкреИрдХреНрдб рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЕрдирдкреИрдХреНрдб рдбреЗрдЯрд╛ 0xFF 0xFF 0xFF 0x7F рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдордЧреНрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рдФрд░ рд╡реЗ CF рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рд╕рд╛рдордЧреНрд░реА рдПрдХ рдХреНрд░рдордмрджреНрдзрддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред



рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ


  • рдЙрдкрдпреЛрдЧрд┐рддрд╛ 1 рд╕реНрддрд░ рдХреА рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкрд╣рдЪрд╛рдирддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд░рдЦрддреА рд╣реИред рдмрд╛рдХреА рдХреА рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рд░реВрдкреЛрдВ, рд▓реЗрдЖрдЙрдЯ, рдЕрдирд╛рд░рдХреНрд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦрдХрд░
  • рдПрдХреНрд╕рдЯреЗрдВрд╢рди img рдХреЗ рд╕рд╛рде рд╕рдордЧреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдирд╛рд░рдХреНрд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдирдкреИрдХ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ
  • MdInternals рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреА рдПрдХ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ

Source: https://habr.com/ru/post/hi434974/


All Articles