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

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

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

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

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

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

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

Самая последняя фамилия находится в 2016 году. Значит действующая фамилия Петрова . В 2012 была фамилия Иванова .
Значит фамилия становится такой Петрова (Иванова) . Дальше в 2009 году снова Петрова .
Получается уже - Петрова (Иванова (Петрова)) . То есть фамилии в результате могут дублироваться, но только не друг за другом.
...
Рейтинг: 0 / 0
Как проследить изменение ФИО сотрудников
    #39198129
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макс_ППолучается уже - Петрова (Иванова (Петрова)) . То есть фамилии в результате могут дублироваться, но только не друг за другом.
И как это противоречит тому что я написал?
...
Рейтинг: 0 / 0
Как проследить изменение ФИО сотрудников
    #39198131
Макс_П,
прелестно! Ну так пиши уже реализацию своего алгоритма. От нас то что надо?
...
Рейтинг: 0 / 0
Как проследить изменение ФИО сотрудников
    #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
Как проследить изменение ФИО сотрудников
    #39198358
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Макс_ППопробую объяснить ещё. Есть фамилии из 10 баз за каждый год в убывающем порядке от 2016 до 2006:

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

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

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

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

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

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


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


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