Периодические реквизиты
Периодические реквизиты
Подскажите как лучше хранить и использовтаь периодические реквизиты. У меня резко падает производительность, когда у справочника имеется несколько таких реквизитов.
Для примера можно рассмотреть реализацию справочника сотрудников с историей должностей и подразделений.
FB 1.5
Для примера можно рассмотреть реализацию справочника сотрудников с историей должностей и подразделений.
FB 1.5
Подробные примеры - это ты много хочешь. Идеология:
Справочник последних (действующих) поколений записей
ID сущности (ПК)
ID последнего её поколения
атрибуты
Справочник-архив
ID сущности (ФК на справочник действующих поколений)
ID поколения записи (ПК)
дата начала действия
атрибуты
Документы
ID док-та
ID поколения записи (ФК на справочник-архив)
при чтении документа простой прямой джойн на нужное поколение записи справочника чтобы вынуть атрибуты. При составлении нового - выбор из справочника действующих поколений ID последнего поколения. При регистрации документа задним числом - поиск нужного поколения в справочнике-архиве по дате док-та. При фильтрах-группировках по экземплярам сущности - приджойнивание справочника-архива по ID поколения и наложение условий на ID сущности. Возможна вариация отказа от справочника последних поколений вообще и выбор актуальных по макс ID поколения или макс дате начала действия прямо из справочника-архива. Когда 99% процентов документов делаются задним числом (бухгалтерия) вполне оправданно.
Справочник последних (действующих) поколений записей
ID сущности (ПК)
ID последнего её поколения
атрибуты
Справочник-архив
ID сущности (ФК на справочник действующих поколений)
ID поколения записи (ПК)
дата начала действия
атрибуты
Документы
ID док-та
ID поколения записи (ФК на справочник-архив)
при чтении документа простой прямой джойн на нужное поколение записи справочника чтобы вынуть атрибуты. При составлении нового - выбор из справочника действующих поколений ID последнего поколения. При регистрации документа задним числом - поиск нужного поколения в справочнике-архиве по дате док-та. При фильтрах-группировках по экземплярам сущности - приджойнивание справочника-архива по ID поколения и наложение условий на ID сущности. Возможна вариация отказа от справочника последних поколений вообще и выбор актуальных по макс ID поколения или макс дате начала действия прямо из справочника-архива. Когда 99% процентов документов делаются задним числом (бухгалтерия) вполне оправданно.
Вышеописанное случайно не относиться к «внедрению ООП в РСУБД»? Я, пока, такие вещи не практикую.
Изначально выбирал актуальные данные по «макс дате», за исключением того, что каждый периодический показатель хранится у меня в отдельной таблице, что связано с небольшим количеством таких реквизитов. Таблицы указывал в «FROM», а связь в «WHERE». Проблемы, как я писал, возникли, когда у справочников стало появляться несколько таких показателей.
Сейчас выборку периодических реквизитов делаю по типу
SELECT…. , (SELECT ПОКАЗАТЕЛЬ
FROM ТАБЛИЦА_ИСТОРИИ_ПОКАЗАТЕЛЯ
WHERE УСЛОВИЯ_ОТБОРА)
…………………….
В принципе, на скорость отбора данных это особо не повлияло. Минусом является то, что запросы становятся несколько «дремучими», однако, использование представлений снимает эту проблему.
Вообщем, на данный момент исходя из сложности задач, которые мне приходится решать меня все устраивает, но на будущее хотелось бы знать специфические моменты автоматизации бухгалтерии (можно очень кратко, просто чтобы знать какие вопросы могут вызвать трудности при первом пректировании).
Изначально выбирал актуальные данные по «макс дате», за исключением того, что каждый периодический показатель хранится у меня в отдельной таблице, что связано с небольшим количеством таких реквизитов. Таблицы указывал в «FROM», а связь в «WHERE». Проблемы, как я писал, возникли, когда у справочников стало появляться несколько таких показателей.
Сейчас выборку периодических реквизитов делаю по типу
SELECT…. , (SELECT ПОКАЗАТЕЛЬ
FROM ТАБЛИЦА_ИСТОРИИ_ПОКАЗАТЕЛЯ
WHERE УСЛОВИЯ_ОТБОРА)
…………………….
В принципе, на скорость отбора данных это особо не повлияло. Минусом является то, что запросы становятся несколько «дремучими», однако, использование представлений снимает эту проблему.
Вообщем, на данный момент исходя из сложности задач, которые мне приходится решать меня все устраивает, но на будущее хотелось бы знать специфические моменты автоматизации бухгалтерии (можно очень кратко, просто чтобы знать какие вопросы могут вызвать трудности при первом пректировании).
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Если
а) не требуется спошная визуализация актуальных состояний в грид-виде
б) большинство документов оформляется задним числом (а по жизни с бюстгальтерией например так и есть, хоть на день, но не в момент реального факта операции)
то справочник последних актуальных состояний действительно нафиг не упал. По-хорошему он вообще нужен только для задачи а), например выбор экземпляра сущности навигацией по таблице. Поэтому я на всяк случай дал самый полный вариант и оговорил это в конце. Для автоматизированного поиска одной записи лучше всегда пользоваться архивом - код везде одинаковый, а проигрыша при выборке последней записи считай что нет при правильных индексах.
а) не требуется спошная визуализация актуальных состояний в грид-виде
б) большинство документов оформляется задним числом (а по жизни с бюстгальтерией например так и есть, хоть на день, но не в момент реального факта операции)
то справочник последних актуальных состояний действительно нафиг не упал. По-хорошему он вообще нужен только для задачи а), например выбор экземпляра сущности навигацией по таблице. Поэтому я на всяк случай дал самый полный вариант и оговорил это в конце. Для автоматизированного поиска одной записи лучше всегда пользоваться архивом - код везде одинаковый, а проигрыша при выборке последней записи считай что нет при правильных индексах.
У меня возникли смутные сомненья - а не о разных ли мы вещах говорим. Вы, господа, не об отслеживании ли истории каждого атрибута записи в справочнике по отдельности? Имхо это ересь и самомозгоимение. Изменился любой атрибут - появилось новое поколение записи как таковой. В том числе и когда атрибут - ссылка на другой справочник. Диски от этого не переломятся.
Идея с быстрыми join-ами очень привлекательна, однако, насколько я понимаю она хорошо работает в случаях, когда только документы вводяться задним числом. А что делать если задним числом оформляется сам периодический показатель?
Пара обычных примеров из области сельского хозяйства:
Цена списания топлива на период, как правило, определяется в конце самого периода (специфика бухгалтерии). Тоже самое с определением плотности топлива (используется для перевода из кг в л и наооборот).
Недавно в одном из крупных хозяйств персонал, работающий с программой чисто случайно обнаружил, что некоторое время назад (от 2 до 4 недель) добрая часть техники одной бригады, перешла в другую бригаду... Их просто забыли (или не захотели) об этом оповестить.
Я, конечно, может еще не до конца понял вашу идею, но перспектива эпизодического обновления внешних ключей документов мне кажеться бОльшим "самомоз..." (честное слово, сумел это прочитать далеко не с первого раза), чем использование подзапросов.
Пара обычных примеров из области сельского хозяйства:
Цена списания топлива на период, как правило, определяется в конце самого периода (специфика бухгалтерии). Тоже самое с определением плотности топлива (используется для перевода из кг в л и наооборот).
Недавно в одном из крупных хозяйств персонал, работающий с программой чисто случайно обнаружил, что некоторое время назад (от 2 до 4 недель) добрая часть техники одной бригады, перешла в другую бригаду... Их просто забыли (или не захотели) об этом оповестить.
Я, конечно, может еще не до конца понял вашу идею, но перспектива эпизодического обновления внешних ключей документов мне кажеться бОльшим "самомоз..." (честное слово, сумел это прочитать далеко не с первого раза), чем использование подзапросов.
Топлива чи не топлива - пофиг вообще-то. Только списание-то выполняется после определения себестоимости по любому. Иначе это специфика уже не бухгалтерииGust писал(а): Цена списания топлива на период, как правило, определяется в конце самого периода (специфика бухгалтерии).
Эт не для моего хилого умишкаGust писал(а): Тоже самое с определением плотности топлива (используется для перевода из кг в л и наооборот).
И что, пришлось бы проапдейтить туеву хучу ключей? В тыще докУментов ссылка именно на состав техники бригады?Gust писал(а): Недавно в одном из крупных хозяйств персонал, работающий с программой чисто случайно обнаружил, что некоторое время назад (от 2 до 4 недель) добрая часть техники одной бригады, перешла в другую бригаду... Их просто забыли (или не захотели) об этом оповестить.
Не нравиццо - не ешь. На прощание - при проектировании люди искушённые учитывают основные режимы работы с данными. Если частота чтения одной и той же записи в десятки раз превосходит частоту обновления, то структурой оптимизируют чтение, даже в ущерб записи. И наоборот. И даже более того, оптимизируют типовые запросы, даже если для этого приходится жертвовать производительностью некоторых, выполняющихся раз в год по обещанию. Конкретные решения принимает конкретный разработчик для конкретной системы.Gust писал(а): Я, конечно, может еще не до конца понял вашу идею, но перспектива эпизодического обновления внешних ключей документов мне кажеться бОльшим "самомоз..." (честное слово, сумел это прочитать далеко не с первого раза), чем использование подзапросов.
Себестоимость производимой продукции никоем образом не влияет на цену списания расходных материалов..Merlin писал(а):Топлива чи не топлива - пофиг вообще-то. Только списание-то выполняется после определения себестоимости по любому. Иначе это специфика уже не бухгалтерии
Исходя из того что работа техники, как средства производства, отражается ежедневно в первичной документации именно это и пришлось бы делать.Merlin писал(а):И что, пришлось бы проапдейтить туеву хучу ключей? В тыще докУментов ссылка именно на состав техники бригады?
Ни в коем случае не хочу обижать, но выражения подобные "Хоца куцать кариешки" или "Афтар цука" с возрастом проходят у всех безMerlin писал(а):Не нравиццо - не ешь.
исключения.
уж тебе то до его возраста и опыта явно еще расти и расти. Без шуток. Merlin у нас самый, гм, "в возрасте" пользователь Firebird. И мне, 40-летнему, до него еще далеко, а такого опыта в прикладных системах я уже не получу (ибо ими занимаюсь только "снаружи").Ни в коем случае не хочу обижать, но выражения подобные "Хоца куцать кариешки" или "Афтар цука" с возрастом проходят у всех без
исключения.
На выражения не обращай внимания - это "для колеру". Ты лучше еще раз почитай этот топик, и внимай.
ты, видать, недопонял. Есть бригада. есть техника. Техника в бригаде (состав бригады) - это, как бы, доп. связь, которая не может участвовать в "первичных документах". Если надо отслеживать историю состава бригады - значит, это надо делать. Но опять же, состав меняется редко, и об изменении массы FK здесь тоже речь не идет, если я правильно понял ситуацию.Исходя из того что работа техники, как средства производства, отражается ежедневно в первичной документации именно это и пришлось бы делать.
Так, для общего развития: цена списания чего-либо равняется себестоимости объёма этого чего-либо на начало периода плюс себестоимость объёма поступлений всё того же чего-либо в течение периода, поделённым на объём начало периода плюс объём поступлений. Это по среднему. По FIFO похитрее, канешна, LIFO запрещён. Откуда тут всплыла производимая продукция - опять же не для моего хилого умишка. Впрочем, я вижу - ты пришёл учить нас, желторотиков. Пасиба, гуру, мине не нана...Gust писал(а):Себестоимость производимой продукции никоем образом не влияет на цену списания расходных материалов..Merlin писал(а):Топлива чи не топлива - пофиг вообще-то. Только списание-то выполняется после определения себестоимости по любому. Иначе это специфика уже не бухгалтерии
Себестоимость – денежное выражение текущих затрат предприятия на производство и реализацию продукции.Merlin писал(а): Так, для общего развития
Цена - денежное выражение стоимости товара.
«Себестоимость» – одна из составных частей «цены».
Термин «себестоимость» относительно товара «топливо» имеет смысл рассматривать только с точки зрения нефтяных компаний, поскольку топливо – это производимая ими продукция. Для всех остальных предприятий топливо – расходный материал. В случае производства, затраты на топливо идут в себестоимость производимой продукции.
Производимая продукция сельского хозяйства – зерно, мясо, молоко…
Для методов списания FIFO, LIFO и «по среднему» за основу берется ЦЕНА, по которой предприятие закупает расходные материалы. «Хитрость» методов FIFO и LIFO заключается в том, что при условии постоянного роста цен, метод FIFO позволяет снизить себестоимость продукции, увеличить прибыль и налоги предприятия, метод LIFO – наоборот. Грамотные экономисты способны извлечь выгоду от использования каждого из рассмотренных методов в зависимости от внутренней и внешней среды предприятия.
На роль «учителя-гуру» ни в коем случае не претендую. Каждый разработчик для себя решает сам насколько хорошо ему надо знать область, в которой он работает.
-
- Сообщения: 44
- Зарегистрирован: 26 окт 2004, 14:30