|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
2 Nebo Сразу же хочется Вас попросить привести алгоритм контроля отрицательных остатков товара в Ваших структурах. Сможете? Нет, не смогу. Этот топик имел целью лишь привести структуры бд их применимость, а писать на каждый вариант рабочую базу, да еще и учитывающую поднимаемые вами ниже вопросы, это работа не на одну неделю. В целом же про остатки я упоминаю в каждом варианте. Можно ли вообще не хранить остатки, а рассчитывать их на лету для товара в расходной накладной? Как при этом сделать контроль отрицательных остатков в MS Access? Всё писал в первом посте. На мой взгляд невозможно вообще сделать контроль отриц. остатков товаров в MS Access. Я пытался. У меня не получилось. Потому-что в Аксессе нет транзакции на чтение. Пока я читаю данные из таблицы остатков, кто-то теоретически их может изменить в этой таблице, в момент чтения. Товароучетные системы писали и до MS Access, вообще без каких бы то ни было транзакций. И с отрицательными остатками, уверен, боролись. Сосед-акцессник Можешь простыми простыми словами сказать - какие семь красных линий ты хочешь изобразить перпендикулярно? О чем этот топик, для кого и зачем? На этот вопрос уже ответил Qwerty123, спасибо ему большое :) Чтобы начать с чего-нибудь простого - есть хоть какие-нибудь осмысленно озвучиваемые соображения, по которым в складской базе "документы" оказались центральным логическим понятием? Если "документов" достаточно - логика какого сорта заставляет довешивать к ним "операции"? Там что-то с докаументами не так или это "денормализация"? Таблица документов расположена "в центре" по двум причинам. Во-первых, мне так было удобнее рисовать. Во-вторых, очень часто при первом создании складской бд, люди приходят к схемам, похожим на 1ю или 2ю. Почему добавлена таблица "операций", я указал в разделе "Вариант 3". Если вам нравится этот термин, то да - это классический образец денормализации. Вот я ничего не знаю про складской учет. (Действительно не знаю не знаю - не занимался этим). По прочтении топика - какую главную умность, как человек не занимавшийся никогда складским учетом, я должен усвоить? Как человек, никогда не занимавшийся - никакую. Если когда-нибудь придется заниматься, то этот топик, возможно, задаст направление для размышлений, сподвигнет провести необходимые тесты производительности и т.д. Авось пригодится, стало быть. t1002 Так я не 1с-ник, поэтому не понимаю, как справочник товаров превратился в номенклатуру. Вообще действительно всё смахивает на логику 1с. Как обычно, отдельная благодарность Alvk за его неоценимый вклад в обсуждение вопросов форума. Видите ли, дорогая редакция. От изменения синонима в названии работа таблицы меняется не очень сильно. Я специально консультировался. А термин "Товары" мне кажется менее подходящим, чем "Номенклатура". Потому что "уборку мусора", "резку металла" и прочие работы и услуги, даже за уши не притянешь к "товарам". P.S. Вариант 4, я, вероятно, на досуге разделю на 2 подварианта. Когда хранятся только "текущие остатки" - "Отдельный справочник", как пишет "SangYong", и когда в процессе работы создаются промежуточные остатки. Всё-таки отличий между ними довольно много. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 11:01 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
упустил 2 qwerty123 [i]...и так, если из "вредности" только, ещё : поле Summ, в DocTable - и в вариантах без "Регистра" (Operations) - "не одобряю" :) , а в вариантах с "Регистром" - точно лишнее ... [/i] В документах Сумма необходима категорически. Тоже пресловутая денормализация, но потенциальной головной боли с различными контрагентами и инстанциями из-за объяснений "почему расходится на копейку" гораздо больше. Я у себя рассчитываю сумму, если вводилась цена, и рассчитываю цену, если вводилась сумма. А храню обязательно всё. Никакие округления не должны менять однажды введенный первичный документ. В "регистрах" же наоборот - нужна сумма, но бессмысленна цена. Цену оттуда считать не придется никогда, эти таблицы нужны только для формирования остатков/оборотов, а суммовые остатки нужны часто. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 11:08 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
2 Geo авторНа этот вопрос уже ответил Qwerty123, спасибо ему большое :) я-то, по наивности, расчитывал услышать начальника транспортного цеха. авторПочему добавлена таблица "операций", я указал в разделе "Вариант 3". в разделе "вариант3" есть слова про "проводки", в картинке - "операции". как понять - это про одно и тоже или нет? Хотел услышать примерно вот о чем - если проводки "надо" - почему схемы без проводок-операций признаются за допустимые в том смысле, что технически правильные. Если без "проводок" можно, значит их наличие - размножение сущностей. Если, наоборот, их "надо", то факт их существования сам по себе представляет какю-то существенную часть моделируемых бизнес-процессов. авторЕсли вам нравится этот термин, то да - это классический образец денормализации. Нет, не нравится термин. До тех пор, пока не ясна уместность его применения. Ладно. извини за вторжение. Не буду я читать этот топик. Даже когда мне станет "надо". Вот почему - в тот момент, когда мне станет "надо", - у меня будет более или менее определенный контекст - в виде набора пользователеей, их ролей и целей по отношению к программе. А также более или мне внятное представление о наборе бизнез-процессов, составляющих область будущей задачи. Вряд ли мне захочется читать в тот момент про сферических коней в вакууме. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 11:41 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
boobyв разделе "вариант3" есть слова про "проводки", в картинке - "операции". как понять - это про одно и тоже или нет?Да, это одно и то же. Поправлю. boobyХотел услышать примерно вот о чем - если проводки "надо" - почему схемы без проводок-операций признаются за допустимые в том смысле, что технически правильные. Если без "проводок" можно, значит их наличие - размножение сущностей. Если, наоборот, их "надо", то факт их существования сам по себе представляет какю-то существенную часть моделируемых бизнес-процессов."Надо их", или не надо - решать исключительно автору программы. Причины и следствия введения таблицы операций-проводок я указал. boobyЛадно. извини за вторжение. Не буду я читать этот топик. Даже когда мне станет "надо". Вот почему - в тот момент, когда мне станет "надо", - у меня будет более или менее определенный контекст - в виде набора пользователеей, их ролей и целей по отношению к программе. А также более или мне внятное представление о наборе бизнез-процессов, составляющих область будущей задачи. Вряд ли мне захочется читать в тот момент про сферических коней в вакууме.Ну и дай бог тебе жену хорошую. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 11:47 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
На мой взгляд контроль отрицательных остатков - это самое слабое место. И это очень важный момент, особенно при сетевой работе. Настоящий 100% контроль на лету в Аксессе сделать, по моему, невозможно. Потому-что запрос на чтение и запрос на изменение в рамках одной транзакции невозможны в Аксессе. А тогда и нет смысла писать склад на Аксессе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 13:19 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
NeboНа мой взгляд контроль отрицательных остатков - это самое слабое место. И это очень важный момент, особенно при сетевой работе. Настоящий 100% контроль на лету в Аксессе сделать, по моему, невозможно. Потому-что запрос на чтение и запрос на изменение в рамках одной транзакции невозможны в Аксессе. А тогда и нет смысла писать склад на Аксессе. Само собой, все написанные на аксе складские программы - лишь выдумка больного воображения разработчиков и пользователей ;))) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 13:37 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
ОзверинNeboНа мой взгляд контроль отрицательных остатков - это самое слабое место. И это очень важный момент, особенно при сетевой работе. Настоящий 100% контроль на лету в Аксессе сделать, по моему, невозможно. Потому-что запрос на чтение и запрос на изменение в рамках одной транзакции невозможны в Аксессе. А тогда и нет смысла писать склад на Аксессе. Само собой, все написанные на аксе складские программы - лишь выдумка больного воображения разработчиков и пользователей ;))) :) Ну я же Вам по существу пишу про транзакцию. А Вы проверьте сперва. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 14:02 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
NeboОзверинпропущено... Само собой, все написанные на аксе складские программы - лишь выдумка больного воображения разработчиков и пользователей ;))) :) Ну я же Вам по существу пишу про транзакцию. А Вы проверьте сперва. Сценарий не понял. Учитывая, что vba - однопоточный, то выполнение изменение и чтение - последовательные операции. В таком случае для транзакции чтение тех данных, которые были изменены в текущей транзакций - стандартный сценарий. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 14:06 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
GeoТак я не 1с-ник, поэтому не понимаю, как справочник товаров превратился в номенклатуру. Вообще действительно всё смахивает на логику 1с. От изменения синонима в названии работа таблицы меняется не очень сильно. Я специально консультировался. А термин "Товары" мне кажется менее подходящим, чем "Номенклатура". Потому что "уборку мусора", "резку металла" и прочие работы и услуги, даже за уши не притянешь к "товарам". Мне уже qwerty112 растолковал, что у вас понятие Номенклатура обозначает Товары. Можно было уже не писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 15:57 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
NeboА тогда и нет смысла писать склад на Аксессе. А народ и не знает, пойду скажу, пусть на Эксель обратно переходят ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 16:00 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
Версия 1 (для архива)В этом топике я опишу несколько вариантов структуры складской БД, от самого простого до довольно "продвинутых" видов, и постараюсь в нескольких словах указать их плюсы и минусы. Возможно, со временем кто-то возьмется окультурить изложенную ниже информацию и довести ее до вида, пригодного к опубликованию в FAQ. Несколько оговорок: - русскоязычные названия полей, используемые в схемах, приведены исключительно для наглядности. Я рекомендую пользоваться во-первых, одним языком при описании структуры таблиц, во-вторых, языком английским. Рекомендую я это с точки зрения удобства написания программ. При использовании англоязычных названий вам придется реже переключать раскладку клавиатуры, и дело будет идти быстрее. Впрочем, никаких других причин не пользоваться русскими названиями, включая религиозные, я не знаю. - справочники Складов, Контрагентов и прочие я описываю в линейном виде, хотя сам предпочитаю делать их иерархическими, по аналогии с приведенной структурой справочника Номенклатуры. Поскольку организация иерархии - это отдельная и объемная тема, то останавливаться на ней здесь я не буду. Вариант 1. Самый аскетичный вариант. Подразумевается, что все документы хранятся в общей таблице Doc, а их табличные части в одной для всех таблице DocTable. Для примера к таблице Doc "пристёгнуты" справочники Контрагентов и Складов, аналогично по мере необходимости добавляются и другие справочники, например: валют, причин списания, корреспондентских счетов и пр. Отчеты об остатках и движениях товаров формируются из этих таблиц, причем запросы для их формирования будут большими и трудными в восприятии. И при каждом сколько-нибудь существенном изменении таблиц или добавлении нового вида документов мы получим массу проблем с доведением этих запросов. Плюсы: - простая и компактная схема БД. Минусы: - много избыточной информации. Многие документы имеют исключительно свои поля, которые не используются в других документах. И чем дальше развивается программа, тем больше будет таких полей. - при использовании выделенного sql сервера для обработки и хранения данных, придется писать громоздкие и неудобные в восприятии триггеры на таблицы Doc и DocTable. - весьма неудобные запросы для получения остатков и оборотов. - по мере роста базы очень большое время получения остатков и оборотов. Вариант 2. Те же, и по одной таблице на каждый документ. Теперь одной форме (или нескольким почти идентичным формам) документа у нас соответствует одна таблица в базе. Это значительно упрощает поддержку и развитие программы, изменяя один документ, мы перестаем получать паровоз изменений, которые могут потребоваться во всех остальных формах, обслуживающих прочие документы. Плюсы: - простая схема БД. Минусы: - неудобные запросы для получения остатков и оборотов. - по мере роста базы очень большое время получения остатков и оборотов. Примечание Оба эти варианта очень просты, но отличаются сложностью обработки информации и получения отчетов. Поэтому имеет смысл делать одну или несколько служебных таблиц, которые заполняются по мере редактирования таблиц документов. При работе с полноценным sql-сервером их заполнение разумно делать триггерами, при использовании же "чистого" Access, они заполняются в процедурах обслуживания событий форм: при удалении, редактировании и создании записей. В последнем случае так же нельзя будет забывать обо всех других способах изменения таблиц, например, при импорте данных, загрузках из ТСД и прочее. Во всех этих случаях надо будет изменять и служебные таблицы. Вариант 3. Добавляем таблицу проводок. "Развивать" я буду вариант 2, но не вижу препятствий и для соответствующих изменений варианта 1. При каждом введении, удалении или редактировании документа, программа должна обеспечивать соответствующее изменение в таблице проводок. Приходные документы будут добавлять записи проводок с положительным количеством, расходные - с отрицательным, а документы на перемещения между складами будут делать по две записи на каждую свою строку: одну для прихода на склад-получатель, и одну для расхода со склада-источника. Плюсы: - очень простые и удобные запросы для получения остатков и оборотов товаров. Минусы: - При достижении определенных (и не очень больших, кстати) объемов товарооборота, все эти запросы начнут здорово тормозить. И особенно в случаях, когда данные будут располагаться на другом компьютере в сети, либо потребуется получать остатки при вводе документов, производительности этого варианта окажется недостаточно, и вам придется развивать программу дальше. Вариант 4. Проводки+остатки. Этот вариант гораздо удобнее делать, используя sql сервер, с помощью триггеров на таблицу проводок. При каждом изменении таблицы проводок автоматически пересчитываются остатки товаров. Остатки можно хранить на "последний момент" и/или на определенные периоды, например, на 1-е число каждого месяца. Плюсы: - стабильное и небольшое время получения остатков и оборотов. Минусы: - запросы на получение оборотов должны будут считать входящие (а возможно и исходящие) остатки от даты ближайшего предыдущего периода рассчитанных остатков, что здорово их усложняет. - изменение документов "задним числом" обязательно должно инициировать пересчет всех необходимых остатков. Что также требует довольно непростых обработок, и, кроме того, приводит к подчас очень приличному времени перерасчетов. Настолько приличному, что, например, в 1С 7.7 для решения этой проблемы вводится механизм "последовательности документов", который предназначен, в сущности, для того, чтобы в нужный момент сказать пользователю: "раз вы не потратили время на перепроведение, то мы умываем руки и не обещаем правильных оборотов". - программа уже становится не наколенной поделкой, а довольно непростым в написании продуктом. Примечание Дальнейшее развитие базы возможно приведет вас к необходимости партионного учета. То есть товар из очередного поступления надо отличать от остальных поступлений того же товара. Например и как минимум по сроку годности. Этот вариант я (пока или совсем) описывать здесь не буду. Кроме того, я не затрагиваю массу вопросов, которые возникнут, если вам потребуется обеспечивать одновременную работу нескольких пользователей: журналирование изменений, репликацию удаленных баз и др. Это отдельная, очень большая и непростая тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 16:11 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 16:41 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
NeboНастоящий 100% контроль на лету в Аксессе сделать, по моему, невозможно. Потому-что запрос на чтение и запрос на изменение в рамках одной транзакции невозможны в Аксессе. А тогда и нет смысла писать склад на Аксессе Ну, на акцессе лучше клиент, а база на сервере. Но даже если на акцессе: (мы говорим о складе) 1. Реально подбор расхода в документ - длительный процесс, товар можно выбрать, удалить, изменить количество - и все это еще не сохранив расход - и все это с нескольких рабочих мест. Значит надо завести буферную/временную таблицу (БТ) куда писать ИД товара, кол-во и ИД юзера. 2. При выборе товара показывать его остатки с учетом БТ 3. При сохранении документа - блокировать БТ, а потом удалять отработавшего Юзера из БТ. 4. Другие спокойно ждут, пока БТ блокирована. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 17:33 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
3а. + При сохранении - проверять чтоб остатки не ушли в минус. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 18:01 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
2слова про партии, без них склад мне не очень понятен. Потому что на реальном складе обычно интересно, с какого прихода товар мы продаем. Ну и выкидывать ненужные "закрытые" партии из расчетов тоже приятно, можно быстрее посчитать остатки Все документы одинаковы, но некоторые документы одинаковее других. А именно приходные. Партиеобразующие. Если пытатся считать по партиям, то таблички получаются примерно такие Док- номер, дата, Откуда, Куда, Тип Документа ДокДет Ссылка на док,ссыдка на Партия, количество, Цена Партия- Товар, НДС, Таможенная и реестровая всякая фигня Товар- Наименование ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 19:32 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
кто-то готов внятно объяснить почему "остаток на складе" не может "уйти в минус" назовите хотя бы одну объективную причину, почему этого нельзя допускать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 23:50 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
зы: У нас "отрицательный остаток" - перманентное состояние. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:08 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
Что то я не увидел особо продвинутого вида связей по складу. Основной упор идет на дополнительные таблицы для хранения истории по документам. Могу помочь с блоком , который описывает все что происходит до склада. Начиная с зарубежного поставщика и нарезке коркодов с комплектами и коробами + транспорт+таможня+все остальное что составляет сущность товародвижения и начисления себестоимости от фабрики до вашей точки отсчета. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:10 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
полиномкто-то готов внятно объяснить почему "остаток на складе" не может "уйти в минус" назовите хотя бы одну объективную причину, почему этого нельзя допускать. полином - это не вопрос "правильного" или "неправильного" программирования. Фигура сия складывается из двух пальцев - первый указует на определение того, что есть "остаток" , второй на на "бизинес-правило" пользователя сего определения. С точки зрения кладовщика он не может опустить более того, что есть в наличии - его бизнес-правило > 0? а у отдела приема заказов ноль может быть скорректирован на объем двухнедельных контрактных поступлений. тип остатка может быть там где-то запрятан - то ли по строкам, то ли по столбцам. Для вакуумного случая - совершенно не важно - есть там тп остатка, или нет. И вопрос не в том, может ли остаток быть меньше нуля, а в том, как поступить, в случае, когда заявлено требование к многопользователькой системе, что остаток некого типа меньше нуля не должен быть. Было сформулировано профессиональное мнение, что поступить никак нельзя. Видимо, скоро кто-нибудь сообщит, что и котенка линией нарисовать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:13 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
nord-woolfзы: У нас "отрицательный остаток" - перманентное состояние. и это совершенно нормально :) ИМХО ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:25 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
и это совершенно нормально Да, выпишем два расхода фирме А и Б, а кладовщик сам решит, кому не положить, того, чего нет. Ну и себестоимость/торговое наложение непонятно как считать... А так да, у всех они есть, только не все признаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:37 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
?????и это совершенно нормально Да, выпишем два расхода фирме А и Б, а кладовщик сам решит, кому не положить, того, чего нет. ... И обе фирмы (и третья, и четвертая, и ...) получат (реально, так сказать, в натуре) то, что им выписано. Такая вот, понимаешь, арифметика ... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:42 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
сосед акцессникзаявлено требование к многопользователькой системе, что остаток некого типа меньше нуля не должен быть. ну и что тогда? систему переделывать или сокращать сроки поставки от поставщика или сроки производства продукции? или увеличивать сроки отгрузки заказа покупателю, в случае если требуемого изделия пока нет или оно еще не сделано? если не ошибаюсь, в NorthWind'e это называется ReorderingLevel. это такое количество, при котором следует заказать новую поставку. если "остаток на складе" это разница между "заказываемые товары" и "поставляемые товары", то она может быть хоть больше нуля, хоть меньше хоть равна нулю. тут нет никакой трагедии. если "остаток на складе" это разница между "поступившим [de facto] товаром" и "выданным [de facto] товаром", то она может быть меньше нуля если только товар производится на складе из воздуха. а если "остаток на складе" это разница между "поступившим [de facto] товаром" и "поставляемым товаром" так может стоит "что-то в бухгалтерии подправить"... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:44 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
автор"что-то в бухгалтерии подправить"... во-во, пральное решение. а то ходють, панимаешь к праграммистам, голову дурят и дурят. сказано нельзя - вот идите отсюда направо и бюстгалтерию правьте. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:58 |
|
Основы проектирования складской БД (v. 2)
|
|||
---|---|---|---|
#18+
авторесли только товар производится на складе из воздуха. эта почти правильно. "из воздуха" - это по волшебству, методом материализации чувственных идей. Вот именно этим программист и занимается - создает материализаторы чувственных идей в виде программных изделий. Так что не из воздуха, а по воле программиста. И обычно, не в части прихода, а в части расхода. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 01:21 |
|
|
start [/forum/topic.php?fid=45&msg=38118855&tid=1619496]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 399ms |
0 / 0 |