'#include TCREATOR
' Здесь должны быть подключены процедуры
' стандартного импорта из CSV.
Sub I2W_ImportData
Dim Creator, Dlg
Set Creator = New TCreator
Set Dlg = Creator.GetObject(nil, "TOpenDialog", "")
If Not Dlg.Execute Then Exit Sub
Dim fso, f
ReDim FieldValues(39)
ReDim FieldDefs(39)
FieldDefs(0) = Array("surname", "S", 20, True)
FieldDefs(1) = Array("firstname", "S", 20, True)
FieldDefs(2) = Array("middlename", "S", 20, False)
FieldDefs(3) = Array("birthdate", "D", 0, True)
FieldDefs(4) = Array("usr$wg_bcity", "S", 32, False)
FieldDefs(5) = Array("usr$wg_bdistrict", "S", 32, False)
FieldDefs(6) = Array("usr$wg_bregion", "S", 20, False)
FieldDefs(7) = Array("usr$wg_bcountry", "S", 32, False)
FieldDefs(8) = Array("passportnumber", "S", 40, False)
FieldDefs(9) = Array("passportissdate", "D", 0, False)
FieldDefs(10) = Array("passportissuer", "S", 40, False)
FieldDefs(11) = Array("passportexpdate", "D", 0, False)
FieldDefs(12) = Array("personalnumber", "S", 40, True)
FieldDefs(13) = Array("usr$insurancenumber", "S", 40, True)
FieldDefs(14) = Array("hzip", "S", 20, False)
FieldDefs(15) = Array("hcountry", "S", 20, False)
FieldDefs(16) = Array("hsity", "S", 20, False)
FieldDefs(17) = Array("haddress", "S", 60, False)
FieldDefs(18) = Array("hphone", "S", 20, False)
FieldDefs(19) = Array("sex", "S", 1, False)
FieldDefs(20) = Array("usr$education", "S", 40, False)
FieldDefs(21) = Array("usr$maritalstatus", "S", 20, False)
FieldDefs(22) = Array("usr$nationalilty", "S", 40, False)
FieldDefs(23) = Array("usr$mr_fitness", "S", 20, False)
FieldDefs(24) = Array("usr$mr_rank", "S", 60, False)
FieldDefs(25) = Array("usr$mr_regoffice", "S", 60, False)
FieldDefs(26) = Array("usr$mr_prof", "I", 0, False)
FieldDefs(27) = Array("usr$listnumber", "S", 10, False)
FieldDefs(28) = Array("datebegin", "D", 0, True)
FieldDefs(29) = Array("begin_number", "S", 20, False)
FieldDefs(30) = Array("last_date", "D", 0, False)
FieldDefs(31) = Array("last_number", "S", 20, False)
FieldDefs(32) = Array("position", "S", 60, False)
FieldDefs(33) = Array("department", "S", 60, False)
FieldDefs(34) = Array("usr$wg_payform", "S", 20, False)
FieldDefs(35) = Array("usr$wg_kindofwork", "S", 20, False)
FieldDefs(36) = Array("usr$wg_workcharacter","S", 20, False)
FieldDefs(37) = Array("usr$pastcat", "I", 0, False)
FieldDefs(38) = Array("usr$msalary", "C", 0, False)
FieldDefs(39) = Array("usr$dep_oldcode", "S", 8, True)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(Dlg.FileName, 1)
Dim ErrMsg, J, Res, Tr
Set Tr = Creator.GetObject(nil, "TIBTransaction", "")
Set Tr.DefaultDatabase = IBLogin.Database
Tr.StartTransaction
Dim AFolderKey, AImportDeptKey, Found
AFolderKey = I2W_GetID(Tr, "TgdcFolder", "", _
"name", "Импорт данных", _
Array("name"), Array("Импорт данных"), Found)
AImportDeptKey = I2W_GetID(Tr, "TgdcDepartment", "", _
"name", "Импорт данных", _
Array("parent", "name"), Array(IBLogin.CompanyKey, "Импорт данных"), Found)
Dim FirstOrder, FirstOrderLine, FirstOrderDS
Set FirstOrder = Creator.GetObject(nil, "TgdcUserDocument", "")
FirstOrder.Transaction = Tr
FirstOrder.SubType = "147017326_119619099"
FirstOrder.Open
Set FirstOrderDS = Creator.GetObject(nil, "TDataSource", "")
FirstOrderDS.DataSet = FirstOrder
Set FirstOrderLine = Creator.GetObject(nil, "TgdcUserDocumentLine", "")
FirstOrderLine.SubType = FirstOrder.SubType
FirstOrderLine.SubSet = "ByParent"
FirstOrderLine.MasterSource = FirstOrderDS
FirstOrderLine.MasterField = "documentkey"
FirstOrderLine.DetailField = "parent"
FirstOrderLine.Open
FirstOrder.Insert
FirstOrder.FieldByName("documentdate").AsDateTime = Date
FirstOrder.FieldByName("number").AsString = "импорт 1"
FirstOrder.Post
I2W_Log Tr, "TgdcUserDocument", FirstOrder.ID, "Импорт: Создан приказ о приеме."
Dim LastOrder, LastOrderLine, LastOrderDS
Set LastOrder = Creator.GetObject(nil, "TgdcUserDocument", "")
LastOrder.Transaction = Tr
LastOrder.SubType = "147017335_119619099"
LastOrder.Open
Set LastOrderDS = Creator.GetObject(nil, "TDataSource", "")
LastOrderDS.DataSet = LastOrder
Set LastOrderLine = Creator.GetObject(nil, "TgdcUserDocumentLine", "")
LastOrderLine.SubType = LastOrder.SubType
LastOrderLine.SubSet = "ByParent"
LastOrderLine.MasterSource = LastOrderDS
LastOrderLine.MasterField = "documentkey"
LastOrderLine.DetailField = "parent"
LastOrderLine.Open
LastOrder.Insert
LastOrder.FieldByName("documentdate").AsDateTime = Date
LastOrder.FieldByName("number").AsString = "импорт 2"
LastOrder.Post
I2W_Log Tr, "TgdcUserDocument", LastOrder.ID, "Импорт: Создан приказ о переводе."
J = 1
ErrMsg = ""
Do While Not f.AtEndOfStream
Res = I2W_Parse(f.ReadLine, FieldDefs, FieldValues)
Select Case Res
Case -99
Dim MRSKey, PositionKey, PayFormKey, KindOfWorkKey, CharacterKey, DeptKey, MilOfficeKey
Dim EducationTypeKey, FamStatusKey, NationKey, MartFitnessKey, MilRankKey, EmployeeKey
Dim PersonalCardKey, KindOfWorkTemp
EducationTypeKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_EDUCTIONTYPE", _
"usr$name", I2W_FieldByName("usr$education", FieldDefs, FieldValues), _
Array("usr$name"), Array(I2W_FieldByName("usr$education", FieldDefs, FieldValues)), Found)
FamStatusKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_FAMSTATUS", _
"usr$name", I2W_FieldByName("usr$maritalstatus", FieldDefs, FieldValues), _
Array("usr$name"), Array(I2W_FieldByName("usr$maritalstatus", FieldDefs, FieldValues)), Found)
NationKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_NATION", _
"usr$name", I2W_FieldByName("usr$nationalilty", FieldDefs, FieldValues), _
Array("usr$name"), Array(I2W_FieldByName("usr$nationalilty", FieldDefs, FieldValues)), Found)
MartFitnessKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_MARTFITNESS", _
"usr$name", I2W_FieldByName("usr$mr_fitness", FieldDefs, FieldValues), _
Array("usr$name"), Array(I2W_FieldByName("usr$mr_fitness", FieldDefs, FieldValues)), Found)
MilRankKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_MILRATE", _
"usr$name", I2W_FieldByName("usr$mr_rank", FieldDefs, FieldValues), _
Array("usr$name"), Array(I2W_FieldByName("usr$mr_rank", FieldDefs, FieldValues)), Found)
MilOfficeKey = I2W_GetID(Tr, "TgdcCompany", "", _
"name", I2W_FieldByName("usr$mr_regoffice", FieldDefs, FieldValues), _
Array("parent", "name"), Array(AFolderKey, I2W_FieldByName("usr$mr_regoffice", FieldDefs, FieldValues)), Found)
MRSKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_MRS", _
"usr$number", I2W_FieldByName("usr$mr_prof", FieldDefs, FieldValues), _
Array("usr$number"), Array(I2W_FieldByName("usr$mr_prof", FieldDefs, FieldValues)), Found)
PositionKey = I2W_GetID(Tr, "TgdcWgPosition", "", _
"name", I2W_FieldByName("position", FieldDefs, FieldValues), _
Array("name"), Array(I2W_FieldByName("position", FieldDefs, FieldValues)), Found)
PayFormKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_PAYFORM", _
"usr$name", I2W_FieldByName("usr$wg_payform", FieldDefs, FieldValues), _
Array("usr$name"), Array(I2W_FieldByName("usr$wg_payform", FieldDefs, FieldValues)), Found)
CharacterKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_WORKCHARACTER", _
"usr$name", I2W_FieldByName("usr$wg_workcharacter", FieldDefs, FieldValues), _
Array("usr$name"), Array(I2W_FieldByName("usr$wg_workcharacter", FieldDefs, FieldValues)), Found)
DeptKey = I2W_GetID(Tr, "TgdcDepartment", "", _
"usr$dep_oldcode", I2W_FieldByName("usr$dep_oldcode", FieldDefs, FieldValues), _
Array("parent", "name", "usr$dep_oldcode"), Array(AImportDeptKey, I2W_FieldByName("department", FieldDefs, FieldValues),I2W_FieldByName("usr$dep_oldcode", FieldDefs, FieldValues)), Found)
If IsNull(DeptKey) Then
DeptKey = AImportDeptKey
End If
Dim EmployeeName
EmployeeName = I2W_FieldByName("surname", FieldDefs, FieldValues) & " " & _
I2W_FieldByName("firstname", FieldDefs, FieldValues)
EmployeeKey = I2W_GetID(Tr, "TgdcContact", "", "personalnumber", _
I2W_FieldByName("personalnumber", FieldDefs, FieldValues), _
Array("parent", _
"name", _
"surname", _
"firstname", _
"middlename", _
"birthday", _
"usr$wg_bcity", _
"usr$wg_bdistrict", _
"usr$wg_bregion", _
"usr$wg_bcountry", _
"passportnumber", _
"passportissdate", _
"passportissuer", _
"passportexpdate", _
"personalnumber", _
"usr$insurancenumber", _
"hzip", _
"hcountry", _
"hcity", _
"haddress", _
"hphone", _
"sex"), _
Array(_
DeptKey, _
EmployeeName, _
I2W_FieldByName("surname", FieldDefs, FieldValues), _
I2W_FieldByName("firstname", FieldDefs, FieldValues), _
I2W_FieldByName("middlename", FieldDefs, FieldValues), _
I2W_FieldByName("birthday", FieldDefs, FieldValues), _
I2W_FieldByName("usr$wg_bcity", FieldDefs, FieldValues), _
I2W_FieldByName("usr$wg_bdistrict", FieldDefs, FieldValues), _
I2W_FieldByName("usr$wg_bregion", FieldDefs, FieldValues), _
I2W_FieldByName("usr$wg_bcountry", FieldDefs, FieldValues), _
I2W_FieldByName("passportnumber", FieldDefs, FieldValues), _
I2W_FieldByName("passportissdate", FieldDefs, FieldValues), _
I2W_FieldByName("passportissuer", FieldDefs, FieldValues), _
I2W_FieldByName("passportexpdate", FieldDefs, FieldValues), _
I2W_FieldByName("personalnumber", FieldDefs, FieldValues), _
I2W_FieldByName("usr$insurancenumber", FieldDefs, FieldValues), _
I2W_FieldByName("hzip", FieldDefs, FieldValues), _
I2W_FieldByName("hcountry", FieldDefs, FieldValues), _
I2W_FieldByName("hcity", FieldDefs, FieldValues), _
I2W_FieldByName("haddress", FieldDefs, FieldValues), _
I2W_FieldByName("hphone", FieldDefs, FieldValues), _
I2W_FieldByName("sex", FieldDefs, FieldValues) _
), Found)
If IsNull(I2W_FieldByName("usr$wg_kindofwork", FieldDefs, FieldValues)) Then
KindOfWorkTemp = "01" ' по умолчанию -- основное место работы
Else
KindOfWorkTemp = Trim(I2W_FieldByName("usr$wg_kindofwork", FieldDefs, FieldValues))
' В процессе импорта записи типа "КОНТРАКТ" превращаются в "ОСНОВНОЙ",
' "СОВМЕСТИТЕЛЬ ПО КОНТРАКТУ" в "ВНУТРЕННИЙ СОВМЕСТИТЕЛЬ" и т.п.
' Оригинальный вид работ сохраняется в логе системы.
I2W_Log Tr, "TgdcContact", EmployeeKey, KindOfWorkTemp
If Not IsNumeric(KindOfWorkTemp) Then
Select Case UCase(KindOfWorkTemp)
Case "ОСНОВНОЙ"
KindOfWorkTemp = "01"
Case "КОНТРАКТ"
KindOfWorkTemp = "01"
Case "СОВМЕСТИТЕЛЬ"
KindOfWorkTemp = "02"
Case Else
If InStr(1, KindOfWorkTemp, "СОВМЕСТИТЕЛЬ ПО КОНТ", vbTextCompare) = 1 Then ' СОВМЕСТИТЕЛЬ ПО КОНТРАКТУ
KindOfWorkTemp = "02"
ElseIf InStr(1, KindOfWorkTemp, "СОВМЕСТИТЕЛЬ СО СТОР", vbTextCompare) = 1 Then ' СОВМЕСТИТЕЛЬ СО СТОРОНЫ
KindOfWorkTemp = "03"
ElseIf InStr(1, KindOfWorkTemp, "СОВМЕСТИТ.ПО КОНТР.С", vbTextCompare) = 1 Then ' СОВМЕСТИТ.ПО КОНТР.СО СТОРОНЫ
KindOfWorkTemp = "03"
Else
KindOfWorkTemp = "01"
End If
End Select
End If
End If
If IsNumeric(KindOfWorkTemp) Then
KindOfWorkKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_KINDOFWORK", _
"usr$code", KindOfWorkTemp, _
Array("usr$code", "usr$name"), Array(KindOfWorkTemp, KindOfWorkTemp), Found)
Else
KindOfWorkKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_KINDOFWORK", _
"usr$name", KindOfWorkTemp, _
Array("usr$name"), Array(KindOfWorkTemp), Found)
End If
PersonalCardKey = I2W_GetID(Tr, "TgdcAttrUserDefined", "USR$WG_PERSONALCARD", "usr$emplkey", _
EmployeeKey, _
Array("usr$emplkey", _
"usr$surname", _
"usr$firstname", _
"usr$middlename", _
"usr$passportnumber", _
"usr$passportissdate", _
"usr$passportissuer", _
"usr$passportexpdate", _
"usr$personalnumber", _
"usr$insurancenumber", _
"usr$hzip", _
"usr$hcountry", _
"usr$hcity", _
"usr$haddress", _
"usr$pzip", _
"usr$pcountry", _
"usr$pcity", _
"usr$paddress", _
"usr$sex", _
"usr$educationtypekey", _
"usr$famstatuskey", _
"usr$nationality", _
"usr$mr_fitness", _
"usr$mr_rankkey", _
"usr$mr_regofficekey", _
"usr$mr_profkey", _
"usr$number"), _
Array(_
EmployeeKey, _
I2W_FieldByName("surname", FieldDefs, FieldValues), _
I2W_FieldByName("firstname", FieldDefs, FieldValues), _
I2W_FieldByName("middlename", FieldDefs, FieldValues), _
I2W_FieldByName("passportnumber", FieldDefs, FieldValues), _
I2W_FieldByName("passportissdate", FieldDefs, FieldValues), _
I2W_FieldByName("passportissuer", FieldDefs, FieldValues), _
I2W_FieldByName("passportexpdate", FieldDefs, FieldValues), _
I2W_FieldByName("personalnumber", FieldDefs, FieldValues), _
I2W_FieldByName("usr$insurancenumber", FieldDefs, FieldValues), _
I2W_FieldByName("hzip", FieldDefs, FieldValues), _
I2W_FieldByName("hcountry", FieldDefs, FieldValues), _
I2W_FieldByName("hcity", FieldDefs, FieldValues), _
I2W_FieldByName("haddress", FieldDefs, FieldValues), _
I2W_FieldByName("hzip", FieldDefs, FieldValues), _
I2W_FieldByName("hcountry", FieldDefs, FieldValues), _
I2W_FieldByName("hcity", FieldDefs, FieldValues), _
I2W_FieldByName("haddress", FieldDefs, FieldValues), _
I2W_FieldByName("sex", FieldDefs, FieldValues), _
EducationTypeKey, _
FamStatusKey, _
NationKey, _
MartFitnessKey, _
MilRankKey, _
MilOfficeKey, _
MRSKey, _
I2W_FieldByName("usr$listnumber", FieldDefs, FieldValues)), Found)
On Error Resume Next
FirstOrderLine.Insert
FirstOrderLine.FieldByName("usr$movementtype").AsInteger = 1
FirstOrderLine.FieldByName("usr$emplkey").AsInteger = EmployeeKey
FirstOrderLine.FieldByName("usr$listnumber").AsString = I2W_FieldByName("usr$listnumber", FieldDefs, FieldValues)
FirstOrderLine.FieldByName("usr$datebegin").AsDateTime = I2W_FieldByName("datebegin", FieldDefs, FieldValues)
FirstOrderLine.FieldByName("usr$deptkey").Value = DeptKey
FirstOrderLine.FieldByName("usr$positionkey").Value = PositionKey
FirstOrderLine.FieldByName("usr$payformkey").Value = PayFormKey
FirstOrderLine.FieldByName("usr$kindofworkkey").Value = KindOfWorkKey
FirstOrderLine.FieldByName("usr$workcharacterkey").Value = CharacterKey
FirstOrderLine.FieldByName("usr$pastcat").Value = I2W_FieldByName("pastcat", FieldDefs, FieldValues)
FirstOrderLine.FieldByName("usr$msalary").Value = I2W_FieldByName("msalary", FieldDefs, FieldValues)
FirstOrderLine.Post
If (Err.Number <> 0) Or (Err.Description > "") Then
ErrMsg = ErrMsg & "Приказ о приеме: " & Err.Description & " Сотрудник: " & EmployeeName & ". Тип: " & KindOfWorkTemp & vbCrLf
Else
If (Not IsNull(I2W_FieldByName("last_date", FieldDefs, FieldValues))) And _
(I2W_FieldByName("last_date", FieldDefs, FieldValues) > I2W_FieldByName("datebegin", FieldDefs, FieldValues)) Then
LastOrderLine.Insert
LastOrderLine.FieldByName("usr$movementtype").AsInteger = 2
LastOrderLine.FieldByName("usr$emplkey").AsInteger = EmployeeKey
LastOrderLine.FieldByName("usr$listnumber").AsString = I2W_FieldByName("usr$listnumber", FieldDefs, FieldValues)
LastOrderLine.FieldByName("usr$datebegin").AsDateTime = I2W_FieldByName("last_date", FieldDefs, FieldValues)
LastOrderLine.FieldByName("usr$deptkey").Value = DeptKey
LastOrderLine.FieldByName("usr$positionkey").Value = PositionKey
LastOrderLine.FieldByName("usr$payformkey").Value = PayFormKey
LastOrderLine.FieldByName("usr$kindofworkkey").Value = KindOfWorkKey
LastOrderLine.FieldByName("usr$workcharacterkey").Value = CharacterKey
LastOrderLine.FieldByName("usr$pastcat").Value = I2W_FieldByName("pastcat", FieldDefs, FieldValues)
LastOrderLine.FieldByName("usr$msalary").Value = I2W_FieldByName("msalary", FieldDefs, FieldValues)
LastOrderLine.Post
If (Err.Number <> 0) Or (Err.Description > "") Then
ErrMsg = ErrMsg & "Приказ о переводе: " & Err.Description & " Сотрудник: " & EmployeeName & ". Тип: " & KindOfWorkTemp & vbCrLf
End If
End If
End If
On Error GoTo 0
Case -1
ErrMsg = ErrMsg & "Строка " & J & ": Неверное количество полей!" & vbCrLf
Case Else
ErrMsg = ErrMsg & "Строка " & J & ": Ошибка в поле " & FieldDefs(Res)(0) & vbCrLf
End Select
J = J + 1
Loop
If ErrMsg > "" Then
MsgBox "Ошибка в процессе импорта. Дополнительная информация занесена в лог системы."
I2W_Log Null, "", -1, ErrMsg
Tr.Rollback
Else
If MsgBox("Успешно импортировано " & J - 1 & " записей. Сохранить?", vbYesNo) = vbYes Then
Tr.Commit
Else
Tr.Rollback
End If
End If
End Sub