powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / состояние кассы фирмы
16 сообщений из 16, страница 1 из 1
состояние кассы фирмы
    #33500506
curiousxp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые знатоки!
Прошу совета насчет ведения кассы фирм где в обороте две валюты. Фирма занимается торговлей, приход соответственно от продажи товара, расходы(за аренду помещения, комм. услуги, и тд).

Правильно ли будет, если:
создать две таблицы приход(код_филиала, дата, сумма, валюта...), расход(код_филиала, дата, сумма, валюта...). сумма(приход)-сумма(расход)=касса.

или же создать отдельные таблицы приход/расход для каждой валюты?
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33500540
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
curiousxpУважаемые знатоки!
Прошу совета насчет ведения кассы фирм где в обороте две валюты. Фирма занимается торговлей, приход соответственно от продажи товара, расходы(за аренду помещения, комм. услуги, и тд).

Правильно ли будет, если:
создать две таблицы приход(код_филиала, дата, сумма, валюта...), расход(код_филиала, дата, сумма, валюта...). сумма(приход)-сумма(расход)=касса.

или же создать отдельные таблицы приход/расход для каждой валюты?

Лучше одну, для документов (приходных и расходный) а там будет код операции (приход, расход) и код валюты, а валюты с их кодами и операции со своими в другие таблцы-справочники.
Это позволит потом без проблем добавлять валюты и операции (например возврат от клиента) не создавая новых таблиц и ничего не переделывая просто ставя код новой операции или валюты в главную таблицу где это нужно.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33500593
Paul Sacks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что легче будет создать справочник валют и работать с их идентификаторами. Далее нуден полный набор полей таблиц с которыми вы собираетесь работать. Просто бывают случаи, что приходится еще и нормализовать их. Может также придется ввести новые стправочники.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33500652
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas curiousxp...создать две таблицы приход(код_филиала, дата, сумма, валюта...), расход(код_филиала, дата, сумма, валюта...).
или же создать отдельные таблицы приход/расход для каждой валюты?

Лучше одну, для документов (приходных и расходный) а там будет код операции (приход, расход) и код валюты, а валюты с их кодами и операции со своими в другие таблцы-справочники.
Это позволит потом без проблем добавлять валюты и операции (например возврат от клиента) не создавая новых таблиц и ничего не переделывая просто ставя код новой операции или валюты в главную таблицу где это нужно.

По поводу того, что разбивать на таблицы по числу валют не нужно - полностью согласен. Нужна ссылка на код валюты + справочник валют... Еще можно добавить поле пересчета суммы к какой-либо "эталонной" валюте на дату документа (или же сделать таблицу курсов на все даты).
А вот одна таблица и для прихода, и для расхода - очень не советую. Потому что обычно в приходах и расходах используются разные параметры операций, число полей и т.п. - и не всегда умно хранить их в одной таблице, коверкая ее структуру. А выборка из такой таблицы может оказаться еще неприятнее (в плане разных трактовок одного поля в зависимости от типа операции)... Хотя все зависит от Вашей конкретики... Но (ИМХО) масштабируемость и возможность развития такой системы будет плохая.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33500782
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_BЕще можно добавить поле пересчета суммы к какой-либо "эталонной" валюте
Я бы постарался избежать понятия "эталонной" валюты. Практика недавнего прошлого показала, что ее довольно неприятно менять на ходу эксплуатации системы.

Al_BА вот одна таблица и для прихода, и для расхода - очень не советую. Потому что......
Имхо эти подходы в целом эквивалентны, и решение действительно стоит выбирать исходя из конкретики. Варианты:

1. Одна "широкая" таблица с некоторым количеством "иногда незаполняемых" полей

2. Одна таблица "общих полей" и некоторое количество "расширяющих таблиц", содержащих специфику конкретных типов документов и привязанных к общей один к одному

3. Несколько разных таблиц и вьюха/вьюхи, объединяющие общие поля из них в единый список

в принципе позволяют решить одни и те же задачи. Лично мне наиболее симпатичен второй вариант, но в зависимости от специфики (сколько общих полей, насколько похожи разные документы, что удобнее для используемых инструментов), думаю, можно построить примеры "best suited" ситуаций для каждого из вариантов.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33500926
curiousxp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА вот одна таблица и для прихода, и для расхода - очень не советую.....

А как насчет 2-х таблиц, имеется ввиду приход/расход? Хотя мне кажется вариант с одной таблицей тоже не плохой, если допустим:

таблица касса(код_филиала, дата, сумма, валюта, признак_приход_расход, инфо1, инфо2)

инфо1- общяя инф-я в зависимости от операций. Например, если приход(продажа...), если расход(аренда, покупка_матер....)

инфо2- конкретная инф-я прихода/расхода (от продажи стир. машины.../на бензин, аванс для сотр ФИО.....)

Все поля будут обязательно заполняться, ну разве что инфо2, и то редко.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33501418
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_BА вот одна таблица и для прихода, и для расхода - очень не советую.

А если нужно будет еще операцию добавить что новую таблицу создавать (Акт инвентаризации например)? Одна таблица мне кажется лучше, а выбрать из нее очень просто (не понимаю в чем сложность) по коду операции, если нужны специфические поля для какой либо операции то пусть будут, просто не заполняешь их в других случаях.
Про валют: я бы сделал таблицу с курсами на каждый день (или на дни изменения курса).
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33502399
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в дальнейшем предполагается бухгалтерская оценка операций, то нужны две суммы в каждой операции - в валюте операции и в валюте баланса. Таблицу операций лучше иметь единую.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33502686
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Al_BЕще можно добавить поле пересчета суммы к какой-либо "эталонной" валюте
Я бы постарался избежать понятия "эталонной" валюты. Практика недавнего прошлого показала, что ее довольно неприятно менять на ходу эксплуатации системы.


Ну вроде бы на территории РФ рубли пока что никто не отменял ;)
(хотя и можно вспомнить шутку "не знаю, как у вас в Москве, а у нас в России..." :) )
В любом случае даже при "замене" евро обратно на доллар проще будет сделать одно обновление по одному курсу, чем пересчитывать это по очереди из рублей, тенге, гривен и т.п.

softwarer Al_BА вот одна таблица и для прихода, и для расхода - очень не советую. Потому что......
Имхо эти подходы в целом эквивалентны, и решение действительно стоит выбирать исходя из конкретики. Варианты:
1. Одна "широкая" таблица с некоторым количеством "иногда незаполняемых" полей
2. Одна таблица "общих полей" и некоторое количество "расширяющих таблиц", содержащих специфику конкретных типов документов и привязанных к общей один к одному
3. Несколько разных таблиц и вьюха/вьюхи, объединяющие общие поля из них в единый список


Согласен. А я и не настаивал. И тоже подчеркивал, что нужно смотреть конкретную ситуацию.
В простейшем случае все будет эквивалентно. Сложности могут начаться при большом количестве операций, т.е. размере таблицы (хотя я и верю в силу индексов), при излишней "креативности" руководства, бухгалтерии и т.п.. Например, единые ограничения на поля ты не всегда сможешь наложить, если информация в таблице разнотипная (типа того, что получение денег может идти только через банк и всегда требовать ИНН плательщика, а операция выдачи денег допускается и обычным частным лицам, у которых даже фамилия не нужна). Ну и плюс определенный риск, если человеку надо будет вручную рыться в таблицах, а он вдруг пропустит в запросе критерий отбора по типу операции :) Но это все ИМХО.
Пусть автор оценит все мнения - и на их основе выберет свой оптимальный вариант... (Это типа пожелания удачи)
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33502732
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_BСложности могут начаться при большом количестве операций, т.е. размере таблицы (хотя я и верю в силу индексов), при излишней "креативности" руководства, бухгалтерии и т.п.. Например, единые ограничения на поля ты не всегда сможешь наложить, если информация в таблице разнотипная (типа того, что получение денег может идти только через банк и всегда требовать ИНН плательщика, а операция выдачи денег допускается и обычным частным лицам, у которых даже фамилия не нужна). Ну и плюс определенный риск, если человеку надо будет вручную рыться в таблицах, а он вдруг пропустит в запросе критерий отбора по типу операции :) Но это все ИМХО.
Пусть автор оценит все мнения - и на их основе выберет свой оптимальный вариант... (Это типа пожелания удачи)

Про индексы ты зря, реально сокращают время обработки в разы.
А про ИНН и фамилии, это дело для других таблиц.
В "таблице операций" должно быть не много полей (10-20 с системными - кто ввсел инфу и дата ввода и редактирования), главное должно быть:
код типа документа (приход, расход и т.д.), инкримент суммы, декримент суммы, остаток (инкримент для прихода, декримент для расхода, остаток для инвентаризации), код клиента (а там храни хоть фамилии и ИНН хоть адреса любовниц), код операции (приход от банка ХХХ, возврат от клиента по ОТК и т.д. а там храни счета по которым банк работает и т.д.), проведен ли документ или нет, дата документа, ну еще несколько креативных аналитических признаков, можно еще сделать таблицу со строками документа где будет детализация, например по акту возврата вернули 3 одеяла на суммы 2222 и 1 покрывало на 1212. Причем также нужно использовать коды товаров и иметь таблицу номенклатуры.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33503382
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barrabas
Про индексы ты зря, реально сокращают время обработки в разы.

Я ведь и написал, что верю в силу индексов :)
Более того, сам ими активно пользуюсь. Особенно, если коды операций прихода/расхода не пересекать по значениям...

barrabas
В "таблице операций" должно быть не много полей (10-20 с системными - кто ввсел инфу и дата ввода и редактирования), главное должно быть:
код типа документа (приход, расход и т.д.), инкримент суммы, декримент суммы, остаток (инкримент для прихода, декримент для расхода, остаток для инвентаризации), код клиента (а там храни хоть фамилии и ИНН хоть адреса любовниц), код операции (приход от банка ХХХ, возврат от клиента по ОТК и т.д. а там храни счета по которым банк работает и т.д.), проведен ли документ или нет, дата документа, ну еще несколько креативных аналитических признаков, можно еще сделать таблицу со строками документа где будет детализация, например по акту возврата вернули 3 одеяла на суммы 2222 и 1 покрывало на 1212. Причем также нужно использовать коды товаров и иметь таблицу номенклатуры.

Итого по описанию имеем уже две или даже три суммы (читай - поля), из которых заполняется одна :)
Потом окажется, что "креативные аналитические признаки" различаются для прихода и расхода... Причем даже и по типу данных...
Дальше придем к тому, что при возврате обязательно должна быть указана причина и т.п..
А максимального удовольствия достигнем в тот день, когда выяснится (НАПРИМЕР), что для операций прихода какое-нибудь поле "user" должно ссылаться на таблицу сотрудников, а для операций расхода оно же должно ссылаться на таблицу клиентов. А эти таблицы по каким-либо причинам объединить ну никак невозможно... И более того, когда нам придется получить все эти данные в одном запросе, да еще и по какой-либо хитрой связке...

Предлагаю все-таки оставить выбор за автором топика. Я не буду спорить о данном конкретном случае с таблицей кассы, но мое личное мнение, что в целом (раз уж мы сидим в ветке "Проектирование БД") не стоит объединять в одну таблицу принципиально разные процессы, даже если они и имеют определенный набор похожих общих параметров...
Пусть это ИМХО, но я слишком много сталкивался с неприятностями после таких объединений.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33503393
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"... И более того, когда нам придется получить все эти данные в одном запросе, да еще и по какой-либо хитрой связке... "

Вдогонку хочу добавить - и если еще потребуется построить схему данных на базе... С проверкой соответствий, каскадными удалениями и т.п....
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33504092
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_BА максимального удовольствия достигнем в тот день, когда выяснится (НАПРИМЕР), что для операций прихода какое-нибудь поле "user" должно ссылаться на таблицу сотрудников, а для операций расхода оно же должно ссылаться на таблицу клиентов. А эти таблицы по каким-либо причинам объединить ну никак невозможно... И более того, когда нам придется получить все эти данные в одном запросе, да еще и по какой-либо хитрой связке...
поле user это поле user а поле "клиент" это поле "клиент", одно поле должно брать данные только из одной таблицы для любыл операций. Мы и так объединили эти документы по одному признаку - "Финансовые документы", основное приемущество что можно без проблем добавить дополнительную операцию не создавая новую таблицу таблицу и не переделывая все запросы (ели нужно просто изменить условие).

Al_B
Предлагаю все-таки оставить выбор за автором топика.

уж что верно, то верно.
Al_B
Пусть это ИМХО, но я слишком много сталкивался с неприятностями после таких объединений.
Желеть тебя не буду, криво наверное сделали, у меня все без проблем работает и никаких неприятностей. :)
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33504115
Фотография MMM_Corp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полностю поддерживаю идею одной таблици и справок, так у нас, так в банках, так везде, лучше и не придумаєш
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33508826
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_BНу вроде бы на территории РФ рубли пока что никто не отменял ;)
Не отменял. В них просто никто не считает :))

Al_BВ любом случае даже при "замене" евро обратно на доллар проще будет сделать одно обновление по одному курсу,
Э-э, это далеко не одно обновление по одному курсу. В известном мне случае это полтора месяца напряженной работы. Только первый приходящий в голову пример - старые документы с их "эквивалент ... по курсу ...".

Al_Bчем пересчитывать это по очереди из рублей, тенге, гривен и т.п.
Хм. Думаю, насчет количества пересчетов в каждом случае поспорить можно, но не нужно :) Ограничусь следующим: моя позиция состоит в том, что "сразу сделать хорошо и потом спокойно спать по ночам" куда приятнее, нежели "сделать быстро, а потом срочно переделывать как надо". Эталонная валюта с моей точки зрения этому подходу не соответствует. Впрочем, в любом случае тут решать автору топика.

Al_BСложности могут начаться при ......
Безусловно. В то же время есть достаточно инструментов, чтобы противостоять этим сложностям - то же партиционирование. Вообще говоря, если у нас есть набор таблиц и (может быть, если нужна) объединяющая их вьюха, мы можем заменить их общей таблицей (с именем вьюхи) и модифицируемыми вьюхами (с именами таблиц) так, что наш программный код этого практически не заметит. Сложности точно так же могут возникнуть и с разнесенными документами, например, нужно будет помнить все места, куда нужно внести дополнения при появлении очередного типа документов (очередной таблицы). Например, часть кода мы будем вынуждены тупо отдублировать, либо писать динамический sql с подстановкой имен таблиц. Ну а триггера - так точно дублировать. А если у них еще и основные поля по-разному называются... Кстати, тоже болезнь - если есть пятьдесят однотипных таблиц, в одной-двух поле PRICE будет написано с грамматической ошибкой, и неопытный руководитель может поддаться на "ну пусть так останется, не переписывать же то, что уже есть". Ну или например "документом-основанием для документа X могут быть документы следующих 8 типов" - с разными таблицами это бизнес-правило реализуется не очень комфортно.

Именно поэтому я предпочитаю подход под номером два: свести подобные части документов в одну общую таблицу, а специфику разнести по расширяющим. Это несколько усложняет "простой" DML (редактирование документов), но позволяет наиболее естественно и удобно прописать бизнес-логику, в том числе обойтись без кучи проверок на тип документа, необходимых при "черезчур универсальной" таблице.
...
Рейтинг: 0 / 0
состояние кассы фирмы
    #33509043
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
softwarer<...>состоит в том, что "сразу сделать хорошо и потом спокойно спать по ночам" куда приятнее, нежели "сделать быстро, а потом срочно переделывать как надо"<...>

эх-хе-хех... тяжко вздохнул в оффтоп темы
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / состояние кассы фирмы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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