Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проследить изменение ФИО сотрудников / 13 сообщений из 13, страница 1 из 1
22.03.2016, 13:47
    #39197944
Макс_П
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Добрый день!
Есть базы сотрудников, разбитые по годам с 2006 по 2016.
----------------------
Kod | Famil | Name |
----------------------
111 Иванова Яна

Нужно просканировать все базы, начиная с самой свежей, с 2016 по 2006 и проследить изменения в личных данных сотрудников, которые меняли свою фамилию?
Результат должен быть примерно таким:
-------------------------------------------------
Kod | Famil | Name |
-------------------------------------------------
111 Петрова (Иванова (Петрова)) Яна

В данном случае у сотрудницы была фамилия Петрова, она вышла замуж за Иванова и затем опять развелась и взяла девичью фамилию.
...
Рейтинг: 0 / 0
22.03.2016, 14:45
    #39198002
Как проследить изменение ФИО сотрудников
Макс_ПНужно просканировать все базыНу, если нужно, то что вам мешает это сделать? Сканируйте. Или вам надо наше разрешение на это? Разрешаем.
...
Рейтинг: 0 / 0
22.03.2016, 15:21
    #39198056
Березовский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Вы изначально закладываетесь на "некрасивую" структуру хранения периодических данных.
Пока не поздно одумайтесь подумайте
...
Рейтинг: 0 / 0
22.03.2016, 15:26
    #39198064
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Сделай две таблицы: текущее состояние и история
перебирай свои таблицы по возрастанию года. Каждого ищи в текущем состоянии:
1. Нет - добавить
2. Есть и фамилия не совпала - добавить из текущего в историю, заменить в текущем на новую

Дальше из этого выводи как угодно.
...
Рейтинг: 0 / 0
22.03.2016, 16:07
    #39198122
Макс_П
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Dima TСделай две таблицы: текущее состояние и история
перебирай свои таблицы по возрастанию года. Каждого ищи в текущем состоянии:
1. Нет - добавить
2. Есть и фамилия не совпала - добавить из текущего в историю, заменить в текущем на новую

В примере я показал, что результат по фамилиям может повторяться (Девичья фамилия и новая фамилия совпадают). Поэтому две одинаковые фамилии нужно в этом случае показывать в результате.

Попробую объяснить ещё. Есть фамилии из 10 баз за каждый год в убывающем порядке от 2016 до 2006:

--2016-----2015------2014------2013------2012-----2011------2010------2009-------2008------2007------2006
Петрова - Петрова - Петрова - Петрова - Иванова - Иванова - Иванова - Петрова - Петрова - Петрова - Петрова

Самая последняя фамилия находится в 2016 году. Значит действующая фамилия Петрова . В 2012 была фамилия Иванова .
Значит фамилия становится такой Петрова (Иванова) . Дальше в 2009 году снова Петрова .
Получается уже - Петрова (Иванова (Петрова)) . То есть фамилии в результате могут дублироваться, но только не друг за другом.
...
Рейтинг: 0 / 0
22.03.2016, 16:11
    #39198129
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Макс_ППолучается уже - Петрова (Иванова (Петрова)) . То есть фамилии в результате могут дублироваться, но только не друг за другом.
И как это противоречит тому что я написал?
...
Рейтинг: 0 / 0
22.03.2016, 16:12
    #39198131
Как проследить изменение ФИО сотрудников
Макс_П,
прелестно! Ну так пиши уже реализацию своего алгоритма. От нас то что надо?
...
Рейтинг: 0 / 0
22.03.2016, 16:32
    #39198150
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Изучай
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
create Cursor fam (nId i, cFam c(100))
index on nId tag nId
create Cursor fam_hist (nId i, dDate d, cFam c(100))

AddFam(1, date(2006,1,1), 'Иванова')
AddFam(1, date(2007,1,1), 'Иванова')
AddFam(1, date(2008,1,1), 'Петрова')
AddFam(1, date(2009,1,1), 'Петрова')
AddFam(1, date(2010,1,1), 'Иванова')

select date() as dDate, cFam from fam where nId = 1;
	union all (select dDate, cFam from fam_hist where nId = 1);
	order by dDate desc
		

proc AddFam
lpara tnId, tdDate, tcFam
if !IndexSeek(tnId, .T., 'fam', 'nId')
	insert into fam (nId, cFam) values (tnId, tcFam)
	return
endif
if padr(tcFam, len(fam.cFam)) = fam.cFam
	return
endif
insert into fam_hist (nId, dDate, cFam) values (tnId, tdDate, fam.cFam)
repl in Fam cFam with tcFam
return
...
Рейтинг: 0 / 0
22.03.2016, 21:27
    #39198358
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Макс_ППопробую объяснить ещё. Есть фамилии из 10 баз за каждый год в убывающем порядке от 2016 до 2006:

--2016-----2015------2014------2013------2012-----2011------2010------2009-------2008------2007------2006
Петрова - Петрова - Петрова - Петрова - Иванова - Иванова - Иванова - Петрова - Петрова - Петрова - Петрова

Самая последняя фамилия находится в 2016 году. Значит действующая фамилия Петрова . В 2012 была фамилия Иванова .
Значит фамилия становится такой Петрова (Иванова) . Дальше в 2009 году снова Петрова .
Получается уже - Петрова (Иванова (Петрова)) . То есть фамилии в результате могут дублироваться, но только не друг за другом.

А в течение одного года поменять фамилию запрещено? :) Эдак несколько раз.

Может, в этих базах данных есть штатное расписание, где любое изменение состояния работника, в т.ч. фамилия привязано к дате. Есть такое?
...
Рейтинг: 0 / 0
23.03.2016, 10:05
    #39198537
Макс_П
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
XAndyА в течение одного года поменять фамилию запрещено? :) Эдак несколько раз.

Может, в этих базах данных есть штатное расписание, где любое изменение состояния работника, в т.ч. фамилия привязано к дате. Есть такое?
Не запрещено. :) Но это бывает крайне редко. Небольшая погрешность, в данном случае, допускается.
...
Рейтинг: 0 / 0
24.03.2016, 06:42
    #39199226
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Макс_ПНебольшая погрешность, в данном случае, допускается.

Хм, погрешность в перс.данных да если к ним еще и з/п привязана...
...
Рейтинг: 0 / 0
24.03.2016, 11:57
    #39199458
Макс_П
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
T1gRa_NTХм, погрешность в перс.данных да если к ним еще и з/п привязана...
С зарплатой это не связано.
...
Рейтинг: 0 / 0
24.03.2016, 11:59
    #39199467
Макс_П
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проследить изменение ФИО сотрудников
Dima TИзучай
Код: sql
1.
2.
create Cursor fam (nId i, cFam c(100))
index on nId tag nId


Идею понял. Спасибо!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проследить изменение ФИО сотрудников / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]