Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / использование справочников / 13 сообщений из 13, страница 1 из 1
11.11.2003, 09:19
    #32319550
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
Люди, поделитесь опытом, как сделать. Допустим, для выбора клиента используются справочники, и вот возникает ситуация, что клиента надо удалить из справочника, но в таком случае теперь вся отчетность, если вдруг ее надо получить заново по нему, похерится, т.к. клиента не будет. Что делать? Или еще ситуация. У клиетна меняется название и если нго поменять в справочнике, то тогда получается, что отчетность за период, где было старое название клиента, будет неправильной, т.к. там было другое название фирмы. Что делать здесь?
...
Рейтинг: 0 / 0
11.11.2003, 10:26
    #32319656
Серега
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
2SergeyNew
Допустим, для выбора клиента используются справочники, и вот возникает ситуация, что клиента надо удалить из справочника
Этого делать нельзя!!! Не хочешь видеть - поставь признак удаленности (отдельное поле).

У клиетна меняется название и если нго поменять в справочнике
Можно попробовать создавать новую запись со ссылкой на старую (отдельное поле) для отслеживания преемственности. Хотя не думаю, что это имеет какой то смысл. Другое название=>другие реквизиты=>независимая отчетность. Иначе зачем меняли?
...
Рейтинг: 0 / 0
11.11.2003, 10:30
    #32319662
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
Это старая история. Мы например решили эту проблему хранением временных рядов для каждой записи. Смысл в том, что запись при изменении(или команды на удаление со стороны пользователя, которая понимается тоже как виртуальное удаление) порождает новую запись со своим предыдущим состоянием. При этом из таблицы практически никогда ничего не удаляется и ключи (исскуственные!!!!) остаются неизменными. А реализованно все на триггерах. Чудно работает во многих конторах.
...
Рейтинг: 0 / 0
11.11.2003, 10:34
    #32319671
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
А вот насчет изменения реквизитов <Серёга> не совсем прав, реквизиты бывают значимые и информационные. А ещё руководству пофигу изменение пары букв в название, если контора осталось той же, требуется консолидированная отчетность
...
Рейтинг: 0 / 0
11.11.2003, 10:43
    #32319689
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
2Серега

>Не хочешь видеть - поставь признак удаленности (отдельное поле).

Была такая мысль, но вдруг еще как-то можно, вот и спросил.

>Другое название=>другие реквизиты=>независимая отчетность. Иначе зачем меняли

Н-р было "ЧП Иванов", а потом стало "ЧП Иванов и сын"
...
Рейтинг: 0 / 0
11.11.2003, 10:58
    #32319726
Серега
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
2SergeyNew
Н-р было "ЧП Иванов", а потом стало "ЧП Иванов и сын"
Дык это уточнение неправильно введенного названия, или перерегистрированная фирма? Если первое, то проблемы вообще нет. Если второе. А что, можно сменить название и оставить старый ИНН например. Я не в курсе просто.
...
Рейтинг: 0 / 0
11.11.2003, 11:14
    #32319762
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
2Серега

>. А что, можно сменить название и оставить старый ИНН например. Я не в курсе просто

Ну да, название изменили, а ИНН остался старый
...
Рейтинг: 0 / 0
11.11.2003, 11:16
    #32319765
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
2Могун


>Смысл в том, что запись при изменении(или команды на удаление со стороны пользователя, которая понимается тоже как виртуальное удаление) порождает новую запись со своим предыдущим состоянием

А можно немного поподробнее?
...
Рейтинг: 0 / 0
11.11.2003, 11:17
    #32319769
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
я обычно аналогичные проблемы решаю датами....
заводим какой-то объект у него есть даты D_From и D_To. Я думаю смысл понятен. Даты в пределах которых объект коректен. Можно держатьссылку приемственности, если одно предприятие закрылось, а второе на его базе открылось. Переименовывать вполне можно, например если граматическая ошибка. Но нужно и соблюдать логику, если например сменилось юридическое лицо, то меняем и запись о нем...
...
Рейтинг: 0 / 0
11.11.2003, 11:17
    #32319772
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
в смысле создаем новую запись, а в старой закрываем дату, таким образом мы можем хранить всю историю
...
Рейтинг: 0 / 0
11.11.2003, 11:27
    #32319795
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
CREATE TABLE OB (
OB INTEGER NOT NULL,
A_OB INTEGER DEFAULT 0 NOT NULL,
TOB INTEGER NOT NULL,
OWNER INTEGER DEFAULT 0 NOT NULL,
NAME VARCHAR (60) character set WIN1251 collate WIN1251,
FULL_NAME VARCHAR (128) character set WIN1251 collate WIN1251,
DESCRIPTION VARCHAR (10000) character set WIN1251 collate WIN1251,
DELETED INTEGER DEFAULT 0 NOT NULL,
DATE_CREATE DATE DEFAULT "NOW" NOT NULL,
DATE_CHANGE DATE DEFAULT "NOW" NOT NULL,
USER_ID INTEGER DEFAULT 0 NOT NULL,
KOD INTEGER NOT NULL);

CREATE TRIGGER B_U_OB FOR OB ACTIVE
BEFORE UPDATE POSITION 0
AS
BEGIN
NEW.DATE_CHANGE="NOW";
IF ((NEW.A_OB=0) AND
(((NEW.OWNER<>OLD.OWNER) OR (NEW.OWNER IS NULL AND OLD.OWNER IS NOT NULL) OR (NEW.OWNER IS NOT NULL AND OLD.OWNER IS NULL))
OR ((NEW.TOB<>OLD.TOB) OR (NEW.TOB IS NULL AND OLD.TOB IS NOT NULL) OR (NEW.TOB IS NOT NULL AND OLD.TOB IS NULL))
OR ((NEW.NAME<>OLD.NAME) OR (NEW.NAME IS NULL AND OLD.NAME IS NOT NULL) OR (NEW.NAME IS NOT NULL AND OLD.NAME IS NULL))
OR ((NEW.FULL_NAME<>OLD.FULL_NAME) OR (NEW.FULL_NAME IS NULL AND OLD.FULL_NAME IS NOT NULL) OR (NEW.FULL_NAME IS NOT NULL AND OLD.FULL_NAME IS NULL))
OR ((NEW.DESCRIPTION<>OLD.DESCRIPTION) OR (NEW.DESCRIPTION IS NULL AND OLD.DESCRIPTION IS NOT NULL) OR (NEW.DESCRIPTION IS NOT NULL AND OLD.DESCRIPTION IS NULL))
OR ((NEW.DELETED<>OLD.DELETED) OR (NEW.DELETED IS NULL AND OLD.DELETED IS NOT NULL) OR (NEW.DELETED IS NOT NULL AND OLD.DELETED IS NULL))
OR ((NEW.DATE_CREATE<>OLD.DATE_CREATE) OR (NEW.DATE_CREATE IS NULL AND OLD.DATE_CREATE IS NOT NULL) OR (NEW.DATE_CREATE IS NOT NULL AND OLD.DATE_CREATE IS NULL))
))
THEN
INSERT INTO OB(
TOB,
OWNER,
USER_ID,
NAME,
FULL_NAME,
DESCRIPTION,
DELETED,
A_OB)
VALUES(
OLD.TOB,
OLD.OWNER,
OLD.USER_ID,
OLD.NAME,
OLD.FULL_NAME,
OLD.DESCRIPTION,
OLD.DELETED,
OLD.OB);
END
...
Рейтинг: 0 / 0
11.11.2003, 11:41
    #32319832
Могун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
Поле OB.A_OB для текущего состояния всегда = 0, если оно не равно - запись архивная, в таком случае OB.A_OB содержит ссылку на породившую. И если OB.DELETED<>0 - запись удалена
...
Рейтинг: 0 / 0
11.11.2003, 11:59
    #32319874
SergeyNew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование справочников
2Могун

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


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