V8: COM холболт. COM объектуудтай ажиллах гурван тулгуур. COM холболтоор ажиллах нь 1s 8.3 шинэ COM объект үүсгэхээс хамаагүй хялбар юм

1С мэдээллийн сангийн хооронд өгөгдөл солилцох нэг сонголт бол COM холболтоор дамжуулан солилцох явдал юм.

COM холболтыг ашигласнаар та нэг 1С мэдээллийн сангаас нөгөөд холбогдож, өгөгдөл уншиж, бичиж болно. Энэ аргыг өгөгдлийн сангийн клиент-сервер хувилбарууд болон файлын мэдээллийн санд хоёуланд нь ашиглаж болно. Энэ нийтлэлд бид ийм төрлийн холболтын жишээг авч үзэх болно. Жишээ нь платформ 8.2-г ашигладаг.

Та 1С програмын хувьд хоёр төрлийн COM объект үүсгэж болно. Энэ V82. ХэрэглээТэгээд V82.COM Холбогч. Тохиолдолд V82. Хэрэглээ 1С програмын бараг бүрэн хуулбарыг эхлүүлэв. ашиглах тохиолдолд V82.COM ХолбогчЖижиг серверийн хэсэг ажиллаж байна.
Энэ тохиолдолд үйл ажиллагааны хурд илүү өндөр боловч зарим функц ажиллахгүй байж магадгүй юм. Ялангуяа гадаад холболттой ажиллах шинж чанарыг тохируулаагүй маягт, нийтлэг модулиудтай ажиллах. Ихэнхдээ та ашиглах хэрэгтэй V82.COM Холбогчзөвхөн функциональ дутагдалтай тохиолдолд л V82. Хэрэглээ. Үйлдлийн хурдны ялгаа нь ялангуяа их хэмжээний мэдээллийн санд мэдэгдэхүйц байх болно.

Ингээд эхэлцгээе

  1. COM объект үүсгэцгээе
    • Учир нь V82. ХэрэглээХолболт = Шинэ COMObject("V82.Application" ) ;
    • Учир нь V82.COM ХолбогчХолболт = Шинэ COMObject("V82.COMConnector" );
  2. Холболтын мөр үүсгэцгээе
    • өгөгдлийн сангийн сервер хувилбарын хувьд ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • өгөгдлийн сангийн файл хувилбарын хувьд ConnectionString = "File = " "PathKBase" "; Usr = хэрэглэгчийн нэр; Pwd = нууц үг";
  3. Өгөгдлийн санд холбогдож байнаХолболтыг оролдох = Холболт. Холбох(ConnectionString); Exception Message = New MessageToUser; Захиа. Текст = + ErrorDescription() ; Захиа. Мэдээлэх() ; EndAttempt;
  4. Өгөгдлийн сангаас салгаж байнаХолболт = Тодорхойгүй;

    Объектийн хувьд V82. ХэрэглээХолболтыг зогсоох шаардлагатай, эс тэгвээс бүрэн бус сесс хэвээр үлдэх бөгөөд дараа нь гараар устгах шаардлагатай болно. Тохиолдолд V82.COM Холбогчхолболт хийгдсэн процедур дууссаны дараа холболт автоматаар тасардаг.Бас нэг жижиг цэг бий.

    Холболт хийж байгаа хэрэглэгчийн хувьд тохиргоон дотроос "Програмыг хаахдаа баталгаажуулах хүсэлт гаргах" нүдийг идэвхгүй болгох ёстой.

Одоо бүх кодыг нэгтгэж үзье

Холболт = Шинэ COMObject("V82.Application" ) ; //Холболт = Шинэ COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Петя; Pwd = 123" ; //ConnectionString = "Файл = ""С:\MyBase""; Usr = Петя; Pwd = 123";Холболтыг оролдох = Холболт. Холбох(ConnectionString); Exception Message = New MessageToUser; Захиа. Текст = "Мэдээллийн санд холбогдож чадсангүй"+ DescriptionError() ; Захиа. Мэдээлэх() ; EndAttempt; Холболт = Тодорхойгүй;

Холболтын төрлийн хувьд V82. ХэрэглээЭнэ аргыг анх үүсгэсэн COM объектод ашигладаг V82.COM Холбогчаргыг холболтод хэрэглэнэ. Дараа нь хүсэлтийг стандарт 1С хэрэгслийг ашиглан боловсруулдаг. кодонд энэ нь иймэрхүү харагдаж байна:

Хүсэлт = Холболт. NewObject("Хүсэлт"); // Учир нь V82.COM Холбогч Хүсэлт = Холболт. NewObject("Хүсэлт"); // Учир нь V82. Хэрэглээ Хүсэлт. Текст = "СОНГОХ | Байгууллагуудын албан тушаал.. Код, | Байгууллагын албан тушаал.Нэр|FROM | Лавлах. Байгууллагын албан тушаал AS Байгууллагын албан тушаал"; Үр дүн = Хүсэлт. Run(); Жишээ = Үр дүн. Choose(); Баяртай сонголт. Next() Loop EndLoop ;

1C: Enterprise 8.3 хувилбарын хувьд COM объект үүсгэхдээ ашиглах ёстойгоос бусад бүх зүйл өөрчлөгдөөгүй хэвээр байна. "V83.COMConnector"эсвэл "V83. Хэрэглээ".

Хэвлэх (Ctrl+P)

1С мэдээллийн сангийн хооронд өгөгдөл солилцох нэг сонголт бол COM холболтоор дамжуулан солилцох явдал юм. COM холболтыг ашигласнаар та нэг 1С мэдээллийн сангаас нөгөөд холбогдож, өгөгдөл уншиж, бичиж болно. Энэ аргыг өгөгдлийн сангийн клиент-сервер хувилбарууд болон файлын мэдээллийн санд хоёуланд нь ашиглаж болно. Энэ нийтлэлд 8.3 платформ дээрх эдгээр төрлийн холболтуудыг авч үзэх болно

com холболт

Та 1С програмын хувьд хоёр төрлийн COM объект үүсгэж болно. Энэ бол холболтууд юм V83. Хэрэглээ болон com холболтууд V83.COM Холбогч . Тохиолдолд V83. Хэрэглээ 1С програмын бараг бүрэн хуулбарыг эхлүүлэв. Хэрэглэсэн тохиолдолд V83.COM ХолбогчЖижиг серверийн хэсэг ажиллаж байна. Энэ тохиолдолд үйл ажиллагааны хурд илүү өндөр боловч зарим функц ажиллахгүй байж магадгүй юм. Ялангуяа гадаад холболттой ажиллах шинж чанарыг тохируулаагүй маягт, нийтлэг модулиудтай ажиллах. Ихэнхдээ та ашиглах хэрэгтэй V83.COM Холбогчзөвхөн функциональ дутагдалтай тохиолдолд л V83. Хэрэглээ. Үйлдлийн хурдны ялгаа нь ялангуяа их хэмжээний мэдээллийн санд мэдэгдэхүйц байх болно. 8.2 платформын хувьд ашигласан V82.Application эсвэл V82.COMConnector

OLE холболт үүсгэнэ үү

Холболт = Шинэ COMObject(“V83.Application” );

COM холболт үүсгэнэ үү

Холболт = Шинэ COMObject(“V83.COMConnector” );

Холболтын мөр

//Клиент-сервер сонголтын хувьд
Холболтын мөр= “Srvr = ““ServerName” “;Ref = “ “BaseName” ;
//Файлын горимын хувьд:
Холболтын мөр= "Файл = ""PathKBase" “; Usr = Хэрэглэгчийн нэр; Pwd = Нууц үг";
оролдлого
Холболт = Холболт . Холбох(ConnectionString);
Үл хамаарах зүйл
Message = New MessageToUser;
Захиа . Текст = "Мэдээллийн санд холбогдож чадсангүй" + Тодорхойлолт алдаа(); Захиа . Мэдээлэх();
EndAttempt;

Салалт

Холболт = Тодорхойгүй;
Объектийн хувьд V83. ХэрэглээХолболтыг зогсоох шаардлагатай, эс тэгвээс бүрэн бус сесс хэвээр үлдэх бөгөөд дараа нь гараар устгах шаардлагатай болно. Тохиолдолд V83.COM Холбогчхолболт хийгдсэн процедур дууссаны дараа холболт автоматаар тасардаг.Бас нэг жижиг цэг бий. Холболт хийж байгаа хэрэглэгчийн хувьд тохиргоон дотроос "Програмыг хаахдаа баталгаажуулах хүсэлт гаргах" нүдийг идэвхгүй болгох ёстой.

NewObject() арга

Шинэ объект үүсгэхийн тулд та NewObject() аргыг ашиглаж болно, жишээлбэл:

Учир нь V83.COM Холбогч

COM хүсэлт = Холболт. NewObject( "Хүсэлт") ;
TableCOM = Холболт. NewObject( "Үнэт зүйлсийн хүснэгт") ;
ArrayCOM = Холболт. NewObject("Массив");

ViewCOM =Connection.NewObject

Учир нь V83. Хэрэглээ

RequestOLE = Холболт. NewObject(" Хүсэлт") ;
TableOLE = Холболт. NewObject("Үнэт зүйлсийн хүснэгт") ;
ArrayOLE = Connection.NewObject(“Массив”);
ViewCOM =Connection.NewObject(“UniqueIdentifier”, StringUID);

COM хүсэлт . Текст ="СОНГО
| Байгууллагуудын албан тушаал.. Код,
| Байгууллагын албан тушаал.Нэр
|FROM | лавлах.Байгууллагуудын албан тушаал
БАЙГУУЛЛАГЫГ ХЭРХЭН БАЙРЛУУЛАХ ВЭ”;

Үр дүн = RequestCOM. Run();
Дээж = Үр дүн. () сонгоно уу;
Баяртай сонголт. Дараачийн()Цикл
EndCycle;
Та мөн тохиргооны объектын менежерүүдийг ашиглаж болно:
DirectoryCOM = Холболт. Лавлахууд. DirectoryName;
DocumentCOM = Холболт. Баримт бичиг. Баримт бичгийн нэр;
RegisterCOM = Холболт. Мэдээллийн бүртгэл. Бүртгэлийн нэр;

COM холболтоор тооллогыг хүлээн авах, харьцуулах

Тохиргоонд тодорхойлсон тооллогын элементүүдийн утгыг харьцуулахын тулд эдгээр элементүүдийг харьцуулахад хялбар энгийн төрлүүдийн аль нэгэнд хөрвүүлэх шаардлагатай. Ийм төрлүүд нь тоон төрөл эсвэл мөрийн төрөл байж болно. Та тоолох элементийн утгыг дараах байдлаар тоон төрөл болгон хувиргаж болно.

Зүйлийг тоолох = Connection.Directories.Directory1.FindByCode(1).Props1;

PossibleValues ​​= Enum Element.Metadata().Enum Values;

EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement)));

Хэрэв EnumerationItemNumber = 0 бол мэдээлэх( "Тоолох утга1");

ElseIfEnumerationItemNumber = 1 Дараа ньТайлан("ТооцооныҮнэ2");

endIf;

Объектыг COM-ээр танигчаар татаж авч байна

Тохируулгын объектын менежерүүдээр дамжуулан бид com объектыг авдаг, жишээлбэл:
DocumentCOM = Холболт. Баримт бичиг. Баримт бичгийн нэр;

Дараа нь бид өвөрмөц таних тэмдэгт мөрийг авна:

StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())

Тодорхойлогч = Шинэ U өвөрмөц танигч(StringUID);
ХАМТ linkByIdentifier = Documents[DocumentName].GetLink(Identifier);

Хэрэв та com объектыг танигчаар баримтаар олох шаардлагатай бол дараах байдлаар бичих хэрэгтэй.

WidCOM = Connection.NewObject(“UniqueIdentifier”, StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

Нэг 1С тохиргооноос нөгөө рүү өгөгдөл дамжуулах нэг арга бол COM ашиглан програм хангамжийн холболт юм. Олон компаниуд хэд хэдэн өөр мэдээллийн санг ашигладаг бөгөөд тэдгээрийн хооронд тодорхой холболт, хамаарал байх ёстой. Зөвхөн өгөгдөл дамжуулахаас гадна тодорхой өгөгдөл боловсруулах шаардлагатай бол COM холболт нь оновчтой механизм байх болно. Өөр 1С мэдээллийн сангаас өгөгдөлд дүн шинжилгээ хийх чадвар нь аливаа хөгжүүлэгчдэд хэрэгтэй.

Бид COM-ээр дамжуулан 1С мэдээллийн сан руу холбогддог

COM холболтыг 1С дээр хэрэгжүүлэхийн тулд COMConnector хэмээх тусгай механизмыг ашигладаг. Энэ объектыг платформтой хамт суулгасан бөгөөд мэдээллийн баазыг холбоход ашигладаг. 8.2 ба 8.3 хувилбаруудын хувьд "V82.COMConnector" ба "V83.COMConnector" гэсэн өөр нэртэй объектуудыг ашигладаг болохыг тэмдэглэх нь зүйтэй.

Өгөгдлийн сантай COM холболтын үргэлжлэх хугацаа нь лиценз шаарддаг гэдгийг санаарай - хэд хэдэн холболтыг нэгэн зэрэг гүйцэтгэхэд бүү авт. Энэ нь хязгаарлагдмал тооны лицензтэй байгууллагуудад онцгой ач холбогдолтой юм. Энэ асуудлыг мэдээллийн санд идэвхтэй хэрэглэгчийн холболт байхгүй үед гүйцэтгэдэг ердийн ажлуудын тусламжтайгаар шийдэж болно.

Өөр мэдээллийн сантай холбогдож, шаардлагатай мэдээллийг авахын тулд та дараах өгөгдлийг мэдэж байх ёстой.

  1. Энэ нь ямар төрөл вэ - файл эсвэл клиент-сервер;
  2. Энэ нь хаана байрладаг;
  3. Та ямар нэр, нууц үг ашиглаж нэвтэрч болох вэ?
  4. Та ямар өгөгдлийг сонирхож байна вэ?

Эхний гурван цэгээс эхлэн COM холболтыг хэрэгжүүлэхийн тулд та параметрийн мөрийг үүсгэх хэрэгтэй. Мэдээллийн аюулгүй байдлын төрлөөс хамааран гадаад төрхөөрөө ялгаатай байна. Хүлээн авсан мөрийг ашиглан холболт хийгдсэн бөгөөд үүний тусламжтайгаар та ямар ч аргыг ашиглан дүн шинжилгээ хийх, боловсруулах зорилгоор өөр мэдээллийн сангаас мэдээлэл цуглуулж болно.

Connection ParametersFileIB = "Файл=""Өгөгдлийн санд хүрэх зам""; Usr=""Хэрэглэгчийн_нэр"";Pwd=""Нууц үг"""; Connection ParametersClientServerIB = "Srvr=""Серверийн_Нэр""; Ref=""Өгөгдлийн сангийн_Нэр""; Usr=""Хэрэглэгчийн_Нэр""; Pwd=""Нууц үг""";

Холболтын функц нь энгийн бөгөөд хэрэв бүх параметрүүдийг зөв зааж өгсөн бол ямар ч асуулт гаргах ёсгүй. Боломжит алдааны дибаг хийх, дүн шинжилгээ хийх ажлыг хурдасгахын тулд холболтыг "Оролдоод" гэсэн хэсэгт оруулах нь дээр. Функц нь "COM объект" төрлийн утгыг буцааж өгөх бөгөөд та шаардлагатай өгөгдлийг олж авахын тулд ажиллах болно.

&OnServer функц ConnectToBase() exportConnectionIB Параметрүүд = "Файл=""E:\1c мэдээллийн сан\ERP""; Usr=""Администратор"";Pwd=""1"""; V83COMCon= Шинэ COMObject("V83.COMConnector"); Буцах оролдлого V83COMCon.Connect(IB холболтын параметрүүд); Онцгой байдлын тайлан(ErrorDescription()); Тодорхойгүй буцаах; EndAttempt; Төгсгөлийн функц

COM холболтоор дамжуулан та зөвхөн өгөгдлийг сонгоод зогсохгүй холбогдох мэдээллийн сандаа нэмэх боломжтой. Бид COM объектоор дамжуулан 4 анхдагч өгөгдлийн төрлийг дамжуулах боломжтой гэдгийг санаарай. Бусад төрлийг платформд суурилуулсан хайлтын функцийг ашиглан зааж өгөх шаардлагатай. Глобал платформын функцууд нь COM холболтоор дуудагддаг гэдгийг анхаарна уу.

Бид 1С мэдээллийн сангаас мэдээлэл авдаг

Хүссэн объектыг хүлээн авсны дараа та өөр мэдээллийн сангаас өгөгдлийг унших хэрэгтэй. Үүнийг хийхийн тулд бид функцээс "COM объект" төрлийн хүлээн авсан утгыг ашиглан 1С 8.3-т COM холболтоор хүсэлтийг ашигладаг. Эхлээд мэдээллийн санд холбогдож, дараа нь хүсэлтийг гүйцэтгэх нь чухал юм. Гүйцэтгэл нь NewObject аргаар явагддаг бөгөөд объектын төрлийг тэмдэгт мөр хэлбэрээр "Хүсэлт" болгон зааж өгдөг.

&OnServer процедур TestCOMOnServer() Холболт = ConnectToBase(); Хэрэв TypeValue(Connection) Type("Тодорхойгүй") бол RequestBPZO = Connection.NewObject("Хүсэлт"); RequestBPZO.Text = "Эхлээд 15-ыг сонго | DirectoryUser.Name AS Name |FROM | Directory.users AS DirectoryUser"; Сонгох = RequestBPZO.Execute().select(); While Selection.next() давталтын тайлан (Selection.Number); Төгсгөлийн мөчлөг; endIf; Процедурын төгсгөл >

Жишээлбэл, тодорхой хэлтсийн хэрэглэгчдийн талаарх мэдээллийг авахын тулд бид хүсэлтэд параметрээр дамжуулан нөхцөлийг тавина. Нэг параметр нь энгийн төрөл байх болно - мөр, хэлтэс нь "Аж ахуйн нэгжийн бүтэц" лавлах элементийн холбоос байх болно. Асуулгын үр дүн нь COM холболт үүссэн мэдээллийн санд байгаа төрлийн жагсаалтад орсон талбаруудтай хүснэгт юм. Хэрэв та тэдгээрийг өөр төрөл рүү хөрвүүлэх шаардлагатай бол платформын стандарт функцуудыг ашиглана уу:

  • Шугам();
  • Тоо();
  • Огноо ().
RequestBPZO = Connection.NewObject("Хүсэлт"); RequestBPZO.Text = "Эхлээд 15-ыг сонго | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I ХААНА | DirectoryUser.Department = &RequiredDepartment | Мөн DirectoryUser.Name ""%"" + &RequiredName+ ""%""" ; Request BPZO.SetParameter("Шаардлагатай хэлтэс", Холболт. Лавлахууд. Аж ахуйн нэгжийн бүтэц. Кодоор хайх("00-000023")); RequestBPZO.SetParameter("ШаардлагатайНэр","Екатерина"); Сонгох = RequestBPZO.Execute().select(); While Selection.next() давталтын тайлан (Selection.Name); Төгсгөлийн мөчлөг;

Хэрэв та хэд хэдэн параметр, тухайлбал хэлтэс зэрэгт үндэслэн массивыг мэдээллийн сан руу шилжүүлэх шаардлагатай бол NewObject командыг бас ашигладаг. Үүний нэгэн адил та утгуудын жагсаалт эсвэл хүснэгтийг дамжуулж, тэдгээрийг өөр мэдээллийн сангийн элементүүдээр холболтоор дүүргэж болно. Платформын объект, механизмын одоо байгаа бүх аргуудыг хайх боломжтой.

RequestBPZO = Connection.NewObject.("Хүсэлт"); RequestBPZO.Text = "Эхлээд 15-ыг сонго | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I ХААНА | DirectoryUser.Department B (&NecessaryDepartment) | and DirectoryUser.Name like ""%"" + &NecessaryName+ ""%" " "; Хэлтсийн массив = Connection.NewObject("Масив"); Хэлтсийн массив.Нэмэх(Холболт.Директорууд. Аж ахуйн нэгжийн бүтэц. Кодоор олох("00-000023")); Хэлтсийн массив.Нэмэх(Холболт.Директорууд. Аж ахуйн нэгжийн бүтэц. Кодоор олох("00-000038")); Хэлтсийн массив.Нэмэх(Холболт.Директорууд. Аж ахуйн нэгжийн бүтэц. Кодоор олох("00-000046")); Request BPZO.SetParameter("Шаардлагатай хэлтэс", Хэлтсийн массив); RequestBPZO.SetParameter("ШаардлагатайНэр","Екатерина"); Сонгох = RequestBPZO.Execute().select(); While Selection.next() давталтын тайлан (Selection.Name); Төгсгөлийн мөчлөг;

Баримт бичиг эсвэл лавлах элементүүдийг шилжүүлэхдээ тодорхой объектын шилжүүлгийг хянах асуудал үргэлж гарч ирдэг. COM холболтын тусламжтайгаар ийм асуудлыг өвөрмөц танигчаар шийдэж болно. Та "GetLink" функцийг ашиглан одоогийн мэдээллийн аюулгүй байдлын танигчаар залгаасын мэдээллийн сангаас объектыг олох хэрэгтэй. Хэрэв олдохгүй бол COM холболт ашиглан үүсгэж болно.

StrIdent = String(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Хэрэв NOT ValueFilled(Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) дараа нь NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Нэр; NewUser.Individual = Directories.Users.FindByCode("00-0000313"). Хувь хүн; NewUser.Write(); endIf;

Мөн COM холболт нь "Гадаад холболт" шинж чанарыг идэвхжүүлсэн нийтлэг 1С модулиудын горим, функцийг ашиглах эрхтэй. Энэ нөхцлөөс гадна дуудагдсан функц эсвэл процедур нь экспортлох ёстой бөгөөд сервер дээр гүйцэтгэсэн интерактив үйлдлүүдийг агуулаагүй болно. Үгүй бол та үйл ажиллагаа буруу гэсэн алдааг харах болно.

Нийлмэл ...; VariableFunction = Холболт..; функцийн дуудлага>ерөнхий модулийн нэр>процедурын дуудлага>ерөнхий модулийн нэр>

1С дахь өөр мэдээллийн сантай гадаад холболт хийх боломжууд нь нэлээд өргөн бөгөөд олон ажлыг гүйцэтгэх боломжийг танд олгоно. Багаж хэрэгслийг зөв үнэлж, оновчтой шийдлийг сонгох чадвартай байх нь чухал юм. Ихэнх тохиолдолд энэ ур чадвар нь зөвхөн туршлагатай эсвэл туршлагатай мэргэжилтнүүдийн ажлын жишээг судлах замаар л гарч ирдэг.

) Яг зөв

Үүний зэрэгцээ 10 оноо ч хүрээгүй хэвлэлүүд зүгээр л "хөөрөхийг" би нэг бус удаа харсан.
Яагаад ийм зүйл болсон бэ? Хэн нэгэн тэдэнд таалагдсан нь илт байсан бололтой.


Үнэлгээний нийтлэлийг уншалгүйгээр танд хэр их хэрэгтэй байгааг ойлгох эсвэл +/- гэж тийм ч энгийн бусаар үнэлэх нь сайхан байх болно гэж би хэлж байна. Миний таалагдсан зүйлийн тухайд гэвэл би үүнийг ингэж засч залруулах болно: одод зэрэгцэж, олон хүмүүс сайтад цугларсан, олон хүмүүс таалагдсан тул энэ нь маш их ашиг авчирсан тул та өөрөө үүнийг санамсаргүй хэрэг гэж ойлгож байгаа. Нийтлэлийг үндсэн хуудаснаас гармагц зөвхөн хүсэлтийн дагуу л олдох боломжтой тул санал хураалтаар дамжуулж буй хүн бүр санал өгдөг. Миний ойлгож байгаагаар байнгын сэтгэгдэл = нийтлэлийг сурталчлах нь үүнийг үндсэн хуудсан дээр хадгалах боломжийг танд олгоно.
Чухам ийм учраас тэд нийтийн гудамжинд дэлгүүрээ байрлуулдаг - эцсийн эцэст гол зүйл бол барааны чанар, хамааралтай байдал биш, харин тухайн газрын хөдөлгөөнд нийцэх байдал чухал байдаг; алхаж яваа хүмүүс маргааш нь хаях зүйлээ худалдаж авдаг. үйл явцын төлөө. Энэ бол хүн бүрт эртнээс мэдэгдэж байсан өвчин юм - худалдааны донтолт. Эсвэл зүгээр л урсгалыг нэмэгдүүлэх нь зөв худалдан авагчийн магадлалыг нэмэгдүүлдэг.

Мөн давуу болон сул талууд ... - энэ бол зарцуулсан цаг хугацаа, ажилд зориулж нэг төрлийн "баярлалаа" юм


Тэдгээр. Хасах нь бас "баярлалаа" гэж тооцогддог уу? Ийм тохиолдолд хэрэглэх ёстой юу, бусад хүмүүс хэр сонирхолтой гэж боддог талаар таны бодлыг мэдэхийг хүссэн юм? Өгүүллэг таны хувьд хор хөнөөлтэй/муу эсвэл зүгээр л хэрэггүй/хоосон үед нь тавих ёстой юу?
Миний бодлоор нийтлэл нь энгийн үнэлгээний өсөлт шиг харагдаж байна, учир нь:
1. Миний иш татсан төрлүүдийн асуудлыг зохиогч огт тоосонгүй, гэхдээ тэр олон сэтгэгдэл бичихээс залхуураагүй.
2. Өгүүллэгт илт алдаатай байна: энэ бол цорын ганц арга зам гэж хэлсэн

V82 = Шинэ COMObject("V82.ComConnector"); Код = AccountCOM.Code;


гэхдээ би ийм боловсруулалтыг ашиглан үүнийг хялбархан хийж чадна:

Тайлан(Үндсэн. Лавлах. Эсрэг талууд. Нэрээр нь олох("ХХК"). Код);


мөн бүх зүйл сайхан байна! Тэгээд би V82.ComConnector холболтыг сонгоно
Зохиолч нийтлэлдээ дурдсан асуудлуудыг агуулсан байхыг огтхон ч тоохгүй байгаа нь хачирхалтай боловч тэрээр ямар ч хариу үйлдэл үзүүлэхгүй байна.
3. Гэхдээ "Анги байхгүй" гэсэн алдаа гарч ирэхэд асуудал гарсаар байна
4. Гэхдээ 8.2 суулгаад дараа нь 8.1 суулгасан үед асуудал гардаг - OLE/COM-оор дамжуулан стандарт UT-BP солилцоогоор солилцож үзээрэй!
5. Эхлэгчдэд цаг алдахгүйн тулд OLE/COM-ээр дамжуулан бүх нийтээр холбогдох боломжийг олгодог сайт дээрх үндсэн боловсруулалтыг зааж өгнө үү, та тэдэнд зориулж бичээрэй! Дашрамд хэлэхэд яагаад ч юм түүний зураг таны дэлгэц дээр байгаа, яагаад? Үүний үр дүнд гавьяат дээр 2 үг, хөшигний ард 6 үг.

Ерөнхийдөө би шавар хаядаггүй, гэхдээ тодорхой цоорхойг зааж өгдөг, гэхдээ тэг хариу үйлдэл хийдэг. Хэрэв энэ нь таны хуваалцаж байгаа туршлага юм бол энэ нь ямар нэгэн байдлаар алдаатай, бүрэн бус байна.
Миний хэлэх зүйл бол зохиолч бүх алдаагаа цуглуулах хүсэлтэй байсан бол тэр дор хаяж бусдын туршлагыг сонсож, сэтгэгдлийг нь сонсохгүй байх болно. Үүнийг уншсан хүн зохиогчоос илүү ихийг мэддэг, түүнд (заримдаа буруу) хэлж, тэр ч бас эсэргүүцдэг нөхцөл байдал нэн даруй үүсдэг. Үүний үр дүнд бүх мэдээлэл нийтлэлд биш, харин тайлбарт байна! Хөгжилтэй! Энэ нь ихэвчлэн тохиолддог, гэхдээ та хамгийн сайн сайхныг хүсч байгаа гэдэгт анхаарлаа төвлөрүүлэх шаардлагагүй - би хамгийн сайн сайхныг харуулдаг, бусад нь үүнийг харуулдаг! Үүнийг нийтлэлд оруулаарай, энэ нь үнэ цэнэтэй байх болно, хүн бүр энэ мөргөлдөөнийг унших сонирхолгүй байдаг.

Сайн уу Khabrachans!

Энэ нийтлэлд би 1С платформтой интеграцчлалыг байгууллагадаа хэрхэн бий болгосон талаар ярихыг хүсч байна. Намайг үүнийг хийхэд хүргэсэн зүйл бол энэ сэдвээр техникийн мэдээлэл бараг бүрэн дутмаг байсан юм. 1С-ийг аливаа мэдээллийн системтэй холбох сэдвээр янз бүрийн нийтлэл, тайлангуудыг уншиж байхдаа эдгээр нь маркетинг, үзүүлэх шинж чанартай бөгөөд хэзээ ч техникийн шинж чанартай биш, асуудал, түүний шийдлийн мөн чанарыг тусгасан гэдэгт дахин дахин итгэлтэй байна.

Энэ арга нь бүх нийтийнх гэж хэлэхгүй гэдгийг би танд анхааруулж байна. 1С-ийн олон тохиргоо, үүнээс ч илүү мэдээллийн систем, хэл, платформууд байдаг тул боломжит хослолуудын тоо асар их байна. Миний зорилго бол нэг боломжит шийдлийг харуулах явдал юм.


Би Python хэлийг 1С-тэй нэгтгэх хэлээр сонгосон. Энэ нь процессын автоматжуулалтад маш тохиромжтой. Үүнийг синтаксийн минимализм (код маш хурдан бичдэг), баялаг стандарт номын сан (гуравдагч талын модулиудын хэрэгцээ бага), хөндлөн платформ - өндөр магадлалтай, Linix OS дээр бичигдсэн код Windows дээр амжилттай ажиллах боломжтой. .

Эхлэхийн тулд би бидний ажиллах өгөгдлийг тоймлох болно. Тус байгууллага нь Алс Дорнодын бүс нутагт эрчим хүчний борлуулалтын компани юм - ойролцоогоор 400 мянган захиалагчдад үйлчилдэг, 1С мэдээллийн сан нь захиалгат тохиргоонд суурилдаг. Захиалагч бүрийн хувьд түүний төлбөр, хураамж, хэрэглэсэн үйлчилгээ, тооцооны схем, тоолуур, уншилт болон бусад олон өгөгдлийг хадгалдаг.

Хэзээ нэгэн цагт нэгэн байгууллагад Delphi хэл дээр бичигдсэн, MSSQL/Firebird программыг мэдээллийн сан болгон ашигладаг байжээ. Эдгээр гайхалтай цаг үед та ямар ч хэлээр мэдээллийн санд холбогдож, өртэй захиалагчдыг сонгох, хүлээн авсан төлбөрийг нийтлэх, багаж хэрэгслийн уншилтыг бүртгэх зэрэг олон үйлдэл хийх боломжтой. Үйл ажиллагааг автоматжуулах скриптүүдийн цуглуулга байнга нэмэгдэж байгаа нь гайхах зүйл биш юм. Программистууд програмыг нээхгүйгээр ямар ч үйлдэл хийх боломжтой.

Харамсалтай нь, 1С руу шилжсэнээр үнэгүй хэрэглүүр дууссан - мэдээллийн санд шууд холбогдох боломжгүй болсон. Ерөнхийдөө 1С платформ нь өөрөө хуваагдашгүй бөгөөд бусад системтэй нэгтгэхэд тийм ч таатай байдаггүй. Тэдний хэлснээр тэр бол өөрийн гэсэн зүйл юм. Өгөгдлийг 1С-д ачаалахдаа үүнийг тэндээс гаргаж авах нь тийм ч хялбар биш гэдгийг санах хэрэгтэй. Гэхдээ тухайн байгууллагад төлбөрийн систем, хувийн данс нэвтрүүлэх шаардлагатай байсан тул ямар нэгэн шийдэл олох шаардлагатай байв.

Миний өмнө тулгарч буй гол ажил бол нэр, хаяг, хэмжих төхөөрөмж, багажийн заалт, төлбөр, хураамж зэрэг хувийн дансны мэдээллийг хурдан олж авах чадвар байв. Дээрээс нь баримт бичгийг бүрдүүлэх - эвлэрлийн тайлан, төлбөрийн баримт. Тиймээс мэдээллийн сантай шууд холбогдох ямар ч боломжгүй - SQL сервер дээрх 1С мэдээллийн баазыг үзсэн хэн бүхэн aaa1, aaa2 гэх мэт хүснэгтүүдийн массыг ойлгоход хэцүү байдаг. Ийм хүснэгт, талбарын нэрээр асуулга үүсгэх нь бодитой бус юм. Нэмж дурдахад, олон тооны 1С хүснэгтүүд (ялангуяа хамгийн чухал нь, тухайлбал хамгийн сүүлийн үеийн, тэнцвэр, эргэлтийн хэсэг) нь виртуал бөгөөд өөр өөр физик хүснэгтүүдэд тараагдсан бөгөөд олон холболтоор цуглуулдаг. Энэ арга нь тохиромжгүй.

1С платформ нь COM холболтоор холбогдох боломжийг олгодог. Олон Windows програмуудын нэгэн адил 1С-ийг суулгах явцад системд автоматжуулалтын сервер ба COM холбогч гэсэн хоёр COM объект бүртгэгдсэн байдаг. COM технологийг дэмждэг хэлийг ашиглан хоёр объекттой ажиллах боломжтой.

Автоматжуулалтын серверийн объект нь ердийн клиент програмаас бараг ялгаагүй 1С програм юм. Үүний ялгаа нь програмын жишээг программчлан удирдах боломжтой юм. COM холбогч объекттой ажиллахдаа 1С програмын хөнгөн хувилбарыг эхлүүлсэн бөгөөд үүнд интерфэйс, харааны эффекттэй холбоотой хэлбэр, функц, аргууд байхгүй байна. Програм нь өөрөө "Гадаад холболт" горимд эхэлдэг. Глобал хувьсагчдыг эхлүүлэх (жишээлбэл, одоогийн хэрэглэгч болон түүний тохиргоог тодорхойлох) 1С гадаад холболтын модульд хийгдэх ёстой. Хэрэв гадаад холболтын горимд код нь энэ горимд байхгүй функцийг дуудвал онцгой тохиолдол гарах болно (энэ нь манай Python скрипт рүү шилжих болно). Аюулгүй функцүүдийн дуудлагууд нь маягтын бүтэцтэй байх ёстой

#Хэрэв гаднах нэгдэл биш бол Анхааруулга("Сайн уу!"); #EndIf

COM объектуудтай ажиллах нь зөвхөн цонхны технологи учраас стандарт Python түгээлтэд ороогүй нь гайхах зүйл биш юм. Та Python дээр Windows дээр програмчлахад шаардлагатай бүх функцийг хангадаг өргөтгөлүүдийг суулгах шаардлагатай болно. Үүнийг урьдчилан бэлтгэсэн exe суулгагч хэлбэрээр татаж авах боломжтой. Өргөтгөл нь өөрөө бүртгэл, үйлчилгээ, ODBC, COM объект гэх мэт хандах боломжийг олгодог. Өөр хувилбар болгон та Win32 өргөтгөлтэй хамт ирдэг ActiveState Python түгээлтийг нэн даруй суулгаж болно.

Хэсэг хугацааны турш би вэб програмууд, ялангуяа хувийн данс хөгжүүлэхэд COM холболтыг туршиж үзсэн. Дараах сул талуудыг тодорхойлсон.

COM холболт удаан байна. Бага гүйцэтгэл нь COM технологийн сайн мэддэг сул тал юм.
- 1С-тэй холболт үүсгэх үйл явц нь тохиргооноос хамааран 1-ээс 8 секунд хүртэл үргэлжилж болно (миний хувьд - 6 секунд). Хүсэлт бүрд холболт үүсгэснээр хуудас бүрийг ачаалахад 8 секунд зарцуулагдана гэдгийг хэлэх нь илүүц биз.
- Python дээрх вэб програмууд бие даасан сервер байдлаар ажилладаг тул холболтыг ямар нэг глобал хувьсагчид хадгалж, алдаа гарсан тохиолдолд сэргээх замаар өмнөх цэгийг нөхөж болно. Үнэнийг хэлэхэд, би PHP дээр холболтыг хэрхэн хадгалах талаар бодож амжаагүй байна.
- Вэб програмын платформ хоорондын үйл ажиллагаа алдагдсан.

Дээр дурдсан зүйлс дээр үндэслэн харилцан үйлчлэлийн зарчмыг 2 хэсэгт хуваахаар шийдсэн - эхний платформоос хамааралтай (Цонх дээр суурилсан), 1С өгөгдлийг ямар ч тохиромжтой формат руу байршуулах, хоёр дахь нь платформоос хамааралгүй, зарчмын хувьд 1С-ийн талаар юу ч сэжиглэхгүйгээр өгөгдөлтэй ажиллах чадвартай.

Үйлдлийн стратеги нь дараах байдалтай байна: Python скрипт нь 1С-тэй холбогдож, шаардлагатай асуулгыг гүйцэтгэж, өгөгдлийг SQLite мэдээллийн санд байршуулдаг. Та энэ мэдээллийн санд Python, PHP, Java-оос холбогдох боломжтой. Манай төслүүдийн ихэнх нь Python дээр ажилладаг бөгөөд би SQL-ийн түүхий асуулга гараар бичихийг тэвчихгүй болохоор SQLite мэдээллийн сантай холбоотой бүх ажлыг SQLAlchemy ORM-ээр гүйцэтгэдэг. Шаардлагатай бүх зүйл бол мэдээллийн сангийн өгөгдлийн бүтцийг тунхаглалын хэв маягаар дүрслэх явдал байв.

sqlalchemy.ext.declarative-аас declarative_base-аас sqlalchemy импортлох Багана, бүхэл тоо, тоон, огноо, цаг, юникод, логикийн, LargeBinary, ForeignKey Base = declarative_base() анги Abonent(Base): __tablename__ __хүртэлхүйц: __хүснэгт____ ="nkey =" Үнэн) данс = Багана(Юникод(32), индекс=Үнэн) код = Багана(Юникод(32)) хаяг = Багана(Юникод(512)) fio = Багана(Юникод(256)) эх = Багана(Юникод(16) ) psu = Багана(Юникод(256)) tso = Багана(Юникод(256)) np = Багана(Юникод(256)) гудамж = Багана(Юникод(256)) байшин = Багана(Бүхэл тоо) хавтгай = Багана(Бүхэл тоо) mro = Багана(Юникод(256)) анги Төлбөр(Үндсэн): __хүснэгтийн нэр__ = "төлбөр" # гэх мэт...

Одоо та энэ модулийг ямар ч Python төсөлд импортлоход л хангалттай бөгөөд та өгөгдөлтэй ажиллах боломжтой.

Би таны асуултыг урьдчилан таамаглаж байна - "яагаад SQLite?" Гол шалтгаан нь өгөгдлийн сан нь зөвхөн уншигдах зориулалттай тул SQLite-д бичихтэй холбоотой асуудал бидний санааг зовоох ёсгүй. Хоёрдугаарт, энэ DBMS-ийн формат нь тохиромжтой - үзэхэд илүү хялбар (олон үнэгүй хэрэгслүүд байдаг, үүнд FireFox-ийн супер өргөтгөл орно). Гуравдугаарт, зарим тохиолдолд MySQL сервертэй холбогдоогүй машинуудаас захиалагчдад хандах шаардлагатай болдог. Энэ тохиолдолд SQLite мэдээллийн сангийн файлыг хуулж авахад хангалттай бөгөөд энэ машин бүх мэдээлэлд хандах боломжтой болно.

Буулгах ажил өдөрт нэг удаа шөнийн цагаар явагддаг. 1С-д өгөгдөл оруулах ажлыг ижил аргаар автоматжуулж болно. Жишээлбэл, хувийн дансны вэбсайт дээр захиалагчдын үлдээсэн заалтыг бүртгэх шаардлагатай. Энэ тохиолдолд бид дахин 1С-тэй холбогдож, "Унших үйлдэл" баримт бичгийг програмын дагуу үүсгэж, байршуулна. Би доорх кодыг өгөх болно.

Python дээр COM объектуудтай ажиллах нь ер бусын юм. Нэгдүгээрт, кодын "Питоник байдал" алдагдсан - 1С дахь хувьсагч, функцийг нэрлэх дүрэм нь Python-ийн Зентэй таарахгүй байна. Хоёрдугаарт, 1С объектыг ихэвчлэн кирилл үсгээр нэрлэсэн байдаг бөгөөд энэ нь Python дээр хөгжүүлэхэд асуудал үүсгэдэг гэдгийг бүгд мэддэг ... гэхдээ тэдгээрийг шийдэж болно. Би танд кодыг харахыг санал болгож байна:

Импорт pythoncom импорт win32com.client V82_CONN_STRING = "Srvr=v8_server;Ref=v8_db;Usr=хэрэглэгчийн нэр;Pwd=megapass;" pythoncom.CoInitialize() V82 = win32com.client.Dispatch("V82.COMConnector").Холбох(V82_CONN_STRING)

Кодоос харахад үйлчлүүлэгч 1С-тэй ажиллахаар тохируулагдсан байна. COM объект нь “V82.COMConnector” нэрээр тодорхойлогддог. Энэ нэр V8.2 платформд хүчинтэй гэдгийг анхаарна уу, хэрэв танд 8.1 хувилбар байгаа бол нэр нь “V81.COMConnector” байх болно.

Бид эхлүүлсэн клиент дээрх Connect() аргыг дуудаж, холболтын мөрийг дамжуулдаг. Мөр нь серверийн нэр, мэдээллийн сан, хэрэглэгч, нууц үгээс бүрдэнэ. Үүссэн V82 объект нь 1С програмын холболтыг хадгалдаг. Түүнд Disconnect() арга эсвэл үүнтэй төстэй зүйл байхгүй. Өгөгдлийн сангаас салгахын тулд del() функцийг ашиглан объектыг санах ойноос устгаад эсвэл None хувьсагч руу онооно.

Объекттой болсноор та 1С глобал контекстийн аль ч талбар, аргуудад хандаж, TabularDocument, ValueTable гэх мэт бүх нийтийн объектуудтай ажиллах боломжтой. COM холболтоор ажиллах үед 1С нь "Гадаад холболт" горимд ажилладаг гэдгийг анхаарах нь чухал юм. Энэ нь попап харилцах цонх, мэдэгдэл, хамгийн чухал нь маягт гэх мэт интерактив функцийг зөвшөөрдөггүй. Баримт бичгийн маягтын модуль дахь Button1Press() процедурт хамгийн чухал функцийг хавсаргасан тохиргооны хөгжүүлэгчид та нэгээс олон удаа хараана гэдэгт би итгэлтэй байна.

Кирилл үсгийн шинж чанар гэх мэт чухал зүйлийн талаар ярилцъя. Хэдийгээр 1С нь хоёр хэлтэй орчин бөгөөд оросын арга тус бүрийн хувьд англи хэл дээрх аналог байдаг ч эрт орой хэзээ нэгэн цагт та кирилл үсгийн шинж чанарт хандах хэрэгтэй болно. Хэрэв энэ нь PHP эсвэл VBSCript хэл дээр асуудал үүсгэхгүй бол,

Set Con = CreateObject("v81.COMConnector") Set v8 =Con.Connect("Connection string") Set AccountsManager = v8.Documents.Accounts.... Set AccountsRecord= AccountsManager.CreateItem() AccountsRecord.Account = ... ... ... AccountsRecord.Write()

Дараа нь Python код нь зүгээр л синтакс алдаатай гацах болно. Юу хийх вэ? Тохиргоог засах уу? Үгүй ээ, getattr болон setattr аргыг ашиглахад хангалттай. COM объект болон атрибутын кирилл нэрийг эдгээр функцэд дамжуулснаар та дараах утгыг авч, тохируулж болно.

#coding=cp1251 каталог = getattr(V82.Каталог, "Хувийн Данс")

Дараах нь чухал: дэлгэрэнгүй нэрс, функц, аргуудын параметрүүдийг cp1251 кодчилолд дамжуулах ёстой. Тиймээс кодчилолтой төөрөгдүүлэхгүйн тулд файлын эхэнд үүнийг зарлах нь зүйтэй юм: #coding=cp1251. Дараа нь та тэдгээрийн кодчилолд санаа зовохгүйгээр мөрүүдийг дамжуулж болно. Гэхдээ! 1С-ээс хүлээн авсан бүх мөрүүд (дуудлага хийх функц, асуулгын үр дүн) UTF-8 кодчилолд байх болно.

1С орчинд асуулга ажиллуулж, үр дүнг давтаж, SQLite-д мэдээллийн санг хадгалдаг кодын жишээ:

#coding=cp1251 q = """ Хувийн дансыг сонго. Код AS код, Хувийн данс. Барилга. Төлбөр. Нэр + ", " + Хувийн данс. Богино хаяг AS хаяг, Хувийн данс. Захиалагч. Нэр AS fio, Хувийн данс. хэлтэс.Нэр AS psu, EXPRESS (Хувийн дансны зүсмэлийн шинж чанар. Утга AS лавлах. Нутаг дэвсгэрийн сүлжээний байгууллагууд) Нэр AS tso, Хувийн данс. Барилга. Хүн амтай цэг. Нэр AS np, Хувийн данс. Барилга. Гудамж. Нэр АС гудамж, Хувийн данс. Барилга. Хаус АС байшин, Хувийн данс a.Үндсэн өрөө.Өрөөний дугаар AS байр , PersonalAccounts.Division.Parent.Нэр AS mro Лавлах.PersonalAccounts AS Хувийн Данс ХОЛБООС ҮЛДСЭН БүртгэлМэдээллийн.Тэр. = ҮНЭТ (Лавлах.Тэмдэглэлийн төрлүүд. Нутаг дэвсгэрийн сүлжээний байгууллага)) AS CharacteristicsL PersonalAccountsSliceLast програм хангамж PersonalAccounts.Link = CharacteristicsPersonalAccountsSliceLast.Object """ query = V82.NewObject",(Ex.)quose(quose)quose). ) CONN = db.connect() CONN.query(models.Abonent).delete() сонгохдоо.Next(): abonent = models.Abonent() abonent.account = selection.code.strip() abonent.code = сонголт .code abonent.fio = selection.fio abonent.address = selection.address abonent.psu = selection.psu abonent.tso = сонголт. tso abonent.source = u"ASRN" abonent.np = selection.np abonent.street = сонголт .гудамж abonent.house = сонголт.байшин abonent.flat = сонголт.хавтгай abonent.mro = сонголт.mro CONN.add(abonent) CONN.commit()

Энд CONN нь SQLite мэдээллийн сантай холбогдох сесс юм. Асуулгын объектыг үүсгэж, текстийг нь бөглөнө. Дээр дурдсанчлан, хүсэлтийн текст нь cp1251-д байх ёстой бөгөөд үүний тулд кодчилолыг эхлээд зарласан болно. Хүсэлтийг гүйцэтгэсний дараа давхардсан тоо нэмэхгүйн тулд бүх захиалагчдыг мэдээллийн санд устгаж, дараа нь гогцоонд нэмж, эцсийн амлалт хийгдэнэ.

Хүсэлттэй ажиллахдаа би дараах дүрмийг олж мэдсэн.

Талбаруудыг сонгохдоо тэдгээрийг латин үсгээр нэрлээрэй, тэдгээрт getattr()-ийн оронд сонгогч (цэг)-ээр хандах нь илүү тохиромжтой байх болно.
- Зөвхөн анхдагч өгөгдлийн төрлийг сонгоно уу: мөр, тоо, огноо, логик. Объект руу (баримт бичиг, лавлах ном) холбоосыг хэзээ ч бүү сонго! Энэ нөхцөлд танд холбоос огт хэрэггүй бөгөөд бүр хортой, учир нь холбоосын тулгуур эсвэл арга руу залгах нь COM холболтоор дамжуулан хүсэлт гаргахад хүргэдэг. Хэрэв та холбоосын шинж чанаруудад давталтаар хандвал энэ нь маш удаан байх болно.
- Хэрэв та Date төрлийн талбарыг сонговол энэ нь PyTime объект болж буцаагдах болно. Энэ нь COM холболтоор огноо цагийг дамжуулах тусгай өгөгдлийн төрөл юм. Энэ нь ердийн огноотой ажиллахад тийм ч тохиромжтой биш юм. Хэрэв та энэ объектыг int() руу шилжүүлбэл энэ нь цагийн тэмдэг буцаана, үүнээс та fromtimestamp() аргыг ашиглан огноог авах боломжтой.

Одоо хэвлэсэн баримт бичиг хэрхэн бүрддэгийг харцгаая. Баримт нь хэрэглэгчдэд урьдчилан бэлтгэсэн баримт бичгүүдийг, жишээлбэл, төлбөрийн баримт эсвэл тохирлын тайланг татаж авах боломжийг олгох ёстой. Эдгээр баримт бичгүүдийг тогтоосон шаардлагын дагуу 1С-д боловсруулсан бөгөөд Python дээр хэрэгжүүлэхэд маш их цаг хугацаа шаардагдана. Тиймээс 1С-д баримт бичгийг үүсгэж, Excel форматаар хадгалах нь дээр.

Тиймээс, нэгтгэлийн тайлангийн баримт бичгийг гадны тусгай боловсруулалтаар бий болгодог. 1С-ийн нэр томъёог мэдэхгүй хүмүүст: боловсруулалт нь 1С орчинд ажиллахад зориулагдсан өөрийн модуль, маягт, загвар бүхий бие даасан програм юм. Боловсруулалтыг эхлүүлэх, дэлгэрэнгүй мэдээллийг бөглөж, 1С-д үзэх зориулалттай хүснэгтийн баримт бичгийг бидэнд буцааж өгөх функцийг дуудах шаардлагатай. Энэ баримт бичгийг Excel форматаар хадгалж, серверт хуулж эсвэл мэдээллийн санд бүртгэсэн байх ёстой.

Холбоос = getattr(V82.Каталогууд, "Системийн тайлангууд").FindByDescription("Эллений эвлэрлийн тайлан") nav_url = V82.GetURL(холбоос, "Тайлан") нэр = V82.ExternalReports.Connect(nav_url) Гадаад тайлан = V82.Гадаад тайлан. (Нэр) setattr(ExternalReport, "PersonalAccount", лавлагаа) table_doc = ExternalReport.GetDoc() path = V82.GetTempFileName("xls") table_doc.Write(зам, V82 .SpreadsheetDocumentFileType.XLS) тайлан() = загвар.Тайлан үүсгэх тайлан .акаунт = лавлагаа.Код.стрип() тайлан.төрөл = u"үйлдэл" тайлан.баримт бичиг = нээлттэй(зам, "rb").унших() CONN.add(тайлан)

Дээрх фрагмент нь дараахь зүйлийг хийдэг. Баримт бичгийг үүсгэдэг боловсруулалт холбогдсон байна. Боловсруулалтыг тохиргоонд суулгаж, диск дээр эсвэл 1С мэдээллийн санд (зарим лавлахад) хадгалах боломжтой. Боловсруулалт байнга өөрчлөгддөг тул тохиргоогоо шинэчлэхгүйн тулд хамгийн их өөрчлөгддөг боловсруулалтыг "Системийн тайлан" лавлах буюу "Үнэ цэнэ хадгалах" шинж чанарт "Report" гэж нэрлэдэг. Боловсруулалтыг өгөгдлийн сангаас диск рүү буулгаж, ачаалах эсвэл GetURL() аргыг ашиглан эхлүүлж болох бөгөөд үүнд директорийн элемент болон атрибутын нэрний холбоосыг дамжуулах шаардлагатай. Бид хүлээн авсан боловсруулалтын объектод дэлгэрэнгүй мэдээллийг өгч, GetDoc() экспортолсон функцийг дуудаж, түр зуурын Excel файлд хадгалагдсан хүснэгтийн баримт бичгийг хүлээн авдаг. Энэ файлын агуулгыг SQlite мэдээллийн санд бичсэн болно.

Хамгийн сүүлд анхаарах зүйл бол өгөгдлийг 1С-д програмаар оруулах явдал юм. Та захиалагчдаас мэдүүлэг оруулах хэрэгтэй гэж бодъё. Үүнийг хийхийн тулд "Мэдэгдэл авах акт" баримт бичгийг бүрдүүлж, хэрэгжүүлэхэд хангалттай.

#coding=cp1251 acts = getattr(V82.Documents, "Act of Mocumony") act = acts.CreateDocument() setattr(act, "Гэрчлэл", 1024.23) setattr(act, "Захиалагч", "Иванов") # Бөглөх бусад дэлгэрэнгүй... act.Write()
Мэдээлэл оруулах нь одоо автоматжсан.

Тиймээс би COM холболтыг ашиглан программчлан байршуулах, өгөгдөл татахад үндэслэсэн аргыг тодорхойлсон. Энэ арга манай байгууллагад амжилттай хэрэгжиж эхлээд жил шахам болж байна. 1С-ээс бүрдсэн мэдээллийн сан нь 3 төлбөрийн систем, интернетийн эквайринг (Интернетээр дамжуулан картаар төлбөр хийх), хувийн дансанд үйлчилдэг. Нэмж дурдахад янз бүрийн скриптүүд нь мэдээллийн санд холбогдож, горимыг автоматжуулах болно.

Аргын сул талуудыг үл харгалзан (COM холболтын хурд удаан) ерөнхийдөө тогтвортой ажилладаг. Бид ямар ч хэл дээр ажиллах боломжтой платформоос хамааралгүй (SQLite) хэлбэрийн өгөгдөлтэй. Кодын гол хэсэг нь Python хэл дээр бичигдсэн бөгөөд энэ нь 1С дээр мөрөөдөж ч чадахгүй олон хэрэгсэл, техникийг ашиглах боломжтой гэсэн үг юм.

Энэ бол 1С-тэй харилцах боломжит аргуудын нэг юм. Энэ нь шинэ зүйл биш бөгөөд магадгүй аль хэдийн хэн нэгэн туршиж, оновчтой болгосон гэдэгт би итгэлтэй байна. Гэсэн хэдий ч би та бүхнийг өөрийнхөө тулгарсан бэрхшээлээс хамгаалахын тулд үйл явцын талаар аль болох дэлгэрэнгүй танилцуулахыг хичээсэн.

Та бүхэнд амжилт хүсье, мөн 1С нь төсөөлж байгаа шигээ аймшигтай биш гэдгийг санаарай!