?мпорт начальных данных в подсистему Отдел Кадров
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) (→См. также) |
SYSDBA (обсуждение | вклад) (→Макрос импорта) |
||
| Строка 107: | Строка 107: | ||
' Функция возвращает True если конвертация прошла успешно | ' Функция возвращает True если конвертация прошла успешно | ||
Function I2W_Str2Date(S, ByRef D) | Function I2W_Str2Date(S, ByRef D) | ||
| − | |||
I2W_Str2Date = False | I2W_Str2Date = False | ||
| Строка 123: | Строка 122: | ||
End If | End If | ||
End If | End If | ||
| − | |||
End Function | End Function | ||
| + | ' На вход передается строка в CSV формате и символ разделитель значений. | ||
| + | ' На выходе -- массив значений | ||
| + | Function I2W_Split(S, DelimChar) | ||
| + | Const QuoteChar = """" | ||
| − | + | ReDim Result(0) | |
| + | Dim I, B, E, CurrChar, InQuotes | ||
| + | I = 0 | ||
| + | B = 1 | ||
| + | E = 1 | ||
| + | InQuotes = False | ||
| + | Result(0) = "" | ||
| + | |||
| + | While E <= Len(S) | ||
| + | CurrChar = Mid(S, E, 1) | ||
| + | |||
| + | If CurrChar = QuoteChar Then | ||
| + | If Mid(S, E + 1, 1) = QuoteChar Then | ||
| + | E = E + 1 | ||
| + | ElseIf Mid(S, E + 1, 1) = DelimChar Then | ||
| + | If InQuotes Then | ||
| + | CurrChar = "" | ||
| + | InQuotes = False | ||
| + | End If | ||
| + | ElseIf E = B Then | ||
| + | InQuotes = True | ||
| + | CurrChar = "" | ||
| + | End If | ||
| + | ElseIf (CurrChar = DelimChar) And (Not InQuotes) Then | ||
| + | I = I + 1 | ||
| + | ReDim Preserve Result(I) | ||
| + | Result(I) = "" | ||
| + | B = E + 1 | ||
| + | CurrChar = "" | ||
| + | End If | ||
| + | |||
| + | If CurrChar > "" Then | ||
| + | Result(I) = Result(I) & CurrChar | ||
| + | End If | ||
| + | |||
| + | E = E + 1 | ||
| + | WEnd | ||
| + | |||
| + | If (UBound(Result) > 0) And (Result(UBound(Result)) = "") Then | ||
| + | ReDim Preserve Result(UBound(Result) - 1) | ||
| + | End If | ||
| + | |||
| + | I2W_Split = Result | ||
| + | End Function | ||
| + | |||
| + | </syntaxhighlight> | ||
==== См. также ==== | ==== См. также ==== | ||
Версия 17:44, 1 марта 2011
Данные на вход подаются в виде CSV файла следующей структуры:
| # поля | Наименование | Тип данных | Поле в БД | Примечание |
|---|---|---|---|---|
| 1 | Фамилия | VARCHAR(20) | GD_PEOPLE.SURNAME | |
| 2 | Имя | VARCHAR(20) | GD_PEOPLE.FIRSTNAME | |
| 3 | Отчество | VARCHAR(20) | GD_PEOPLE.MIDDLENAME | |
| 4 | Дата рождения | DATE | GD_PEOPLE.BIRTHDAY | |
| 5 | Место рождения, город | VARCHAR(32) | GD_PEOPLE.USR$WG_BCITY | |
| 6 | Место рождения, район | VARCHAR(32) | GD_PEOPLE.USR$WG_BDISTRICT | |
| 7 | Место рождения, область | VARCHAR(20) | GD_PEOPLE.USR$WG_BREGION | |
| 8 | Место рождения, страна | VARCHAR(32) | GD_PEOPLE.USR$WG_BCOUNTRY | |
| 9 | Серия и номер паспорта | VARCHAR(40) | GD_PEOPLE.PASSPORTNUMBER | |
| 10 | Дата выдачи паспорта | DATE | GD_PEOPLE.PASSPORTISSDATE | |
| 11 | Орган, выдавший паспорт | VARCHAR(40) | GD_PEOPLE.PASSPORTISSUER | |
| 12 | Дата действия паспорта | DATE | GD_PEOPLE.PASSPORTEXPDATE | |
| 13 | Личный номер | VARCHAR(40) | GD_PEOPLE.PERSONALNUMBER | |
| 14 | Страховой номер | VARCHAR(40) | GD_PEOPLE.USR$INSURANCENUMBER | |
| 15 | Адрес: индекс | VARCHAR(20) | GD_PEOPLE.HZIP | |
| 16 | Адрес: страна | VARCHAR(20) | GD_PEOPLE.HCOUNTRY | |
| 17 | Адрес: населенный пункт | VARCHAR(20) | GD_PEOPLE.HCITY | |
| 18 | Адрес: улица, дом, корпус, квартира | VARCHAR(60) | GD_PEOPLE.HADDRESS | |
| 19 | Телефон | VARCHAR(20) | GD_PEOPLE.HPHONE | |
| 20 | Пол | CHAR(1) | GD_PEOPLE.SEX | M -- мужской. F -- женский. |
| 21 | Образование | VARCHAR(40) | USR$WG_PERSONALCARD.USR$EDUCATIONTYPEKEY - > USR$WG_EDUCTIONTYPE.USR$NAME | Высшее, незаконченное высшее, общее среднее, среднее специальное, неполное среднее, начальное общее, базовое профессионально-техническое |
| 22 | Семейное положение | VARCHAR(20) | USR$WG_PERSONALCARD.USR$EDUCATIONTYPEKEY -> USR$WG_FAMSTATUS.USR$NAME | Женат, замужем, вдовец, вдова, холост, не замужем, разведена, разведен. |
| 23 | Национальность | VARCHAR(24) | USR$WG_PERSONALCARD.USR$NATIONALITY -> USR$WG_NATION.USR$NAME | |
| 24 | Годность к воинской службе | VARCHAR(180) | USR$WG_PERSONALCARD.USR$MR_FITNESS - > USR$WG_MARTFITNESS.USR$NAME | |
| 25 | Звание | VARCHAR(60) | USR$WG_PERSONALCARD.USR$MR_RANKKEY - > USR$WG_MILRATE.USR$NAME | |
| 26 | Военкомат | VARCHAR(60) | USR$WG_MILRATE.USR$MR_REGOFFICEKEY - > GD_CONTACT.NAME | |
| 27 | Военно-учетная специальность (ВУС) | VARCHAR(20) | USR$WG_MILRATE.USR$MR_PROFKEY -> USR$WG_MRS.USR$NUMBER | |
| 28 | Табельный номер | VARCHAR(10) | USR$WG_MOVEMENTLINE.USR$LISTNUMBER | |
| 29 | Дата приказа о приеме | DATE | USR$WG_MOVEMENTLINE.USR$DATEBEGIN | |
| 30 | Номер приказа о приеме | VARCHAR(20) | GD_DOCUMENT.NUMBER | Это поле необязательно, обычно людей при импорте сбрасывают в один приказ. |
| 31 | Дата последнего приказа о переводе | DATE | USR$WG_MOVEMENTLINE.USR$DATEBEGIN | |
| 32 | Номер последнего приказа о переводе | VARCHAR(20) | GD_DOCUMENT.NUMBER | Это поле необязательно, обычно людей при импорте сбрасывают в один приказ. |
| 33 | Текущая должность | VARCHAR(60) | USR$WG_MOVEMENTLINE.USR$POSITIONKEY - > WG_POSITION.NAME | |
| 34 | Текущее подразделение | VARCHAR(60) | USR$WG_MOVEMENTLINE.USR$DEPTKEY - > GD_CONTACT.NAME | |
| 35 | Форма оплаты труда | VARCHAR(20) | USR$WG_MOVEMENTLINE.USR$PAYFORMKEY - > USR$WG_PAYFORM.USR$NAME | Оклад, Сдельно, Повременно, Не ниже среднего. Могут быть свои типы, но первые четыре должны называться так. |
| 36 | Вид работы | VARCHAR(20) | USR$WG_MOVEMENTLINE.USR$KINDOFWORKKEY -> USR$WG_KINDOFWORK.USR$NAME | Основная. Внутренний совместитель. Внешний совместитель. |
| 37 | Характер работы | VARCHAR(20) | USR$WG_MOVEMENTLINE.WORKCHARACTERKEY - > USR$WG_WORKCHARACTER.USR$NAME | Постоянно. Временно. Сезонно. С оплатой по ср. Не ниже ср. Могут быть и свои типы. |
| 38 | Разряд | INTEGER | USR$WG_MOVEMENTLINE.USR$PASTCAT | |
| 39 | Оклад | NUMERIC(16, 4) | USR$WG_MOVEMENTLINE.USR$MSALARY |
Для данных действуют следующие правила:
- В качестве разделителя полей используется символ ";"
- Для вещественных чисел используется "." в качестве разделителя целой и дробной части. Для отрицательных чисел пробел между знаком "-" и самим числом не допускается.
- Дата передаётся в формате "дд.мм.гггг".
В процессе импорта, объекты ищутся по наименованию без учета регистра символов, концевых и начальных пробелов. Если объект не найден, то он создается.
Документы начального ввода данных
Повторный ввод начальных данных
Макрос импорта
' На вход передается строка с датой в формате дд.мм.гггг ' Сконвертированная дата помещается в переменную D ' Функция возвращает True если конвертация прошла успешно Function I2W_Str2Date(S, ByRef D) I2W_Str2Date = False Dim A A = Split(S, ".") If UBound(A) = 2 Then If IsNumeric(A(0)) And IsNumeric(A(1)) And IsNumeric(A(2)) Then If ((A(0) >= 1) And (A(0) <= 31)) And _ ((A(1) >= 1) And (A(1) <= 12)) And _ ((A(2) >= 1900) And (A(2) <= 2999)) Then D = DateSerial(A(2), A(1), A(0)) I2W_Str2Date = True End If End If End If End Function ' На вход передается строка в CSV формате и символ разделитель значений. ' На выходе -- массив значений Function I2W_Split(S, DelimChar) Const QuoteChar = """" ReDim Result(0) Dim I, B, E, CurrChar, InQuotes I = 0 B = 1 E = 1 InQuotes = False Result(0) = "" While E <= Len(S) CurrChar = Mid(S, E, 1) If CurrChar = QuoteChar Then If Mid(S, E + 1, 1) = QuoteChar Then E = E + 1 ElseIf Mid(S, E + 1, 1) = DelimChar Then If InQuotes Then CurrChar = "" InQuotes = False End If ElseIf E = B Then InQuotes = True CurrChar = "" End If ElseIf (CurrChar = DelimChar) And (Not InQuotes) Then I = I + 1 ReDim Preserve Result(I) Result(I) = "" B = E + 1 CurrChar = "" End If If CurrChar > "" Then Result(I) = Result(I) & CurrChar End If E = E + 1 WEnd If (UBound(Result) > 0) And (Result(UBound(Result)) = "") Then ReDim Preserve Result(UBound(Result) - 1) End If I2W_Split = Result End Function
См. также