| 
 | 
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Есть заявки на закуп, каждая заявка может содержать одну или больше позиций. Каждая позиция содержит поля (номенклатура, количество, цена, статус). Жизненный цикл позиции заявки проходит через 3 отдела (Продажа, Склад, Закуп) в зависимости от некоторых условий. Для каждого статуса позиции есть его следующие статусы, то есть невозможно из некоторого статуса А перейти на статус В минуя статус Б, если это только не предусмотренно каким то условием. Все это разработано, и все это работает на отлично. Все это было в ТЗ. Сейчас встал вопрос как быть если не все количество что есть в позиции меняет статус. То есть, надо закупить 10 штук стульев. Отдел закупок связались с производителем, они отправляют 4 штуки, остальные 6 штук только после 2 месяцев. Получается надо разбить позицию заявки на две части, первая часть это 4 штук стульев меняют статус на 'в дороге'. Вторая часть 6 штук остается со старым статусом или меняется на подходящий. Какие есть предложение структуры базы данных чтобы реализовать эту бизнес логику? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.06.2017, 08:59 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Разбивать на две строки с разным статусом. Других вариантов и не будет. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.06.2017, 09:17 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  LSVРазбивать на две строки с разным статусом. Других вариантов и не будет. Да, логически это первое что напрашивается. Статусов сейчас штук 8. Если позиция будет вот так разбиваться при каждом своем новом статусе (это в самом худшем случае), то в какой то момент состояние изначальной позиции будет выглядеть примерно так: 2 штуки на складе; 1 штука в дороге; 3 штуки доставлен клиенту; ... . И все это только одна позиция в заявке. То есть система должна сохранить начальный и дальнейшие позиции при разбиение на под позиции. А вот структура таблиц какой должна быть? У меня мозг отказывается что-то придумать. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.06.2017, 11:09 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ПомидорLSVРазбивать на две строки с разным статусом. Других вариантов и не будет. Да, логически это первое что напрашивается. Статусов сейчас штук 8. Если позиция будет вот так разбиваться при каждом своем новом статусе (это в самом худшем случае), то в какой то момент состояние изначальной позиции будет выглядеть примерно так: 2 штуки на складе; 1 штука в дороге; 3 штуки доставлен клиенту; ... . И все это только одна позиция в заявке. То есть система должна сохранить начальный и дальнейшие позиции при разбиение на под позиции. А вот структура таблиц какой должна быть? У меня мозг отказывается что-то придумать. С точки зрения "заявки" она не выполнена и будет выполнена только когда прибудут все 10 стульев. Соответственно данная заявка будет находится в состоянии не выполнено. Далее. При отправке создается ТТН. (состояние открыта/закрыта) На складе акт прием передачи (от поставщика на склад, со склада к клиенту) Т.е. каждое изменение статуса стула должно быть подтверждено документами. Т.о. ваша задача к изменению каждого статуса привязать соответствующие документы. Ну а документы имеют определенную структуру. Которая в первом приближении будет таблица (в процессе нормализации их конечно будет больше) Но как минимум это послужит основой сущностей. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.06.2017, 13:58 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ПомидорLSVРазбивать на две строки с разным статусом. Других вариантов и не будет. Да, логически это первое что напрашивается. Статусов сейчас штук 8. Если позиция будет вот так разбиваться при каждом своем новом статусе (это в самом худшем случае), то в какой то момент состояние изначальной позиции будет выглядеть примерно так: 2 штуки на складе; 1 штука в дороге; 3 штуки доставлен клиенту; ... . И все это только одна позиция в заявке. То есть система должна сохранить начальный и дальнейшие позиции при разбиение на под позиции. А вот структура таблиц какой должна быть? У меня мозг отказывается что-то придумать. Все верно сказано. Позиция в заявке, что кто-то хочет 10 стульев - это хорошо, но это только начало бизнес-процесса. Это лишь зафиксированнное желание. Жизнь сложнее: на основании заявки будет несколько договоров на поставку (это к тому, что поставщик обязуется поставить 4 сразу а 6 потом). По каждому исполненному договору - приходные накладные, и вот стулья на складе. Потом в подотчет к пользователям, в учет как основные средства (или как малоценка, ее можно учитывать просто как материалы на складе), потом списание... И все на основании той заявки... Какая часть структуры непонятна? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.06.2017, 15:57 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Cane Cat FisherВсе верно сказано. Позиция в заявке, что кто-то хочет 10 стульев - это хорошо, но это только начало бизнес-процесса. Это лишь зафиксированнное желание. Жизнь сложнее: на основании заявки будет несколько договоров на поставку (это к тому, что поставщик обязуется поставить 4 сразу а 6 потом). По каждому исполненному договору - приходные накладные, и вот стулья на складе. Потом в подотчет к пользователям, в учет как основные средства (или как малоценка, ее можно учитывать просто как материалы на складе), потом списание... И все на основании той заявки... Какая часть структуры непонятна? Структура таблиц в базе данных. Можете привести пример структур таблиц чтобы сохранялась история перемещения позиций с разбивкой их на более мелкие части в какой то момент и объединением этих мелких частей обратно на большие? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.06.2017, 21:21 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ПомидорСтруктура таблиц в базе данных. Можете привести пример структур таблиц чтобы сохранялась история перемещения позиций с разбивкой их на более мелкие части в какой то момент и объединением этих мелких частей обратно на большие? Помидорбудет выглядеть примерно так: 2 штуки на складе; 1 штука в дороге; 3 штуки доставлен клиенту; так экспромт... дробить это Ж..., хотя и напрашивается первым, а если вдруг потом опять 6 стульев дробить... ? можно попробовать на позицию держать несколько полей вместо одного количества: - Заказано - На складе - В дороге - Доставлено ... может еще чего (но лбом об пол до упаду не надо)... Естественно, меняются все цифры в динамике и контролируются периодически по простейшим формулам... Преимущества - что и где за один заход... Дополнительно на позицию придумать и повесить таблицу типа "История", чтоб если че - как говорится "Все ходы записаны"... ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 14.06.2017, 22:15 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  vmagтак экспромт...  дробить это Ж..., хотя и напрашивается первым, а если вдруг потом опять 6 стульев дробить... ? Так и есть, позиция может дробиться при каждом своем новом статусе, каждая раздробленная новая подпозиция живет своей жизнью. 1. Отдел продаж - клиент прости 10 стульев. 2. Отдел склада - есть 4 стулья на складе, появляется новая подпозиция со статусом на складе, для остальных создается подпозиция 6 стульев закупить. 3. Отдел закупок - 2 стулья может доставить этот дистрибьютор, 4 стулья доставит сам производитель, таким образом появляется еще две подпозиции на подпозицию 6 стульев. Ну и так далее. При этом надо всегда знать например складу какие именно стулья для какого клиента предназначены, чтобы стулья для какого то срочного клиента не выдали шустрому агенты продаж. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 04:57 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  попробовать на позицию держать несколько полей вместо одного количества: - Заказано - На складе - В дороге - ДоставленоПлохое решение. Вдруг понадобится иметь подробную инфу по каждому пункту, н-р в дороге - понятие растяжимое: могут доставить 3 стула завтра, а остальные через 3 дня. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 09:37 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Помидор, по логике, добавить состояние для каждого элемента(стул) заказа и отслеживать по отдельности. В зависимости от наименьшего состояния элемента будет определяться статус заявки. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 09:43 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Cane Cat Fisher  же все правильно описал - нужно делать дополнительные сущности. Заявка - Складской резерв (1..N) Заявка - Накладные на закупку (1..N) ... (Можно при этом из заявок, накладных и т.п. выделить супертип "документ", и связи делать между абстрактными документами - но это сложнее) Количество в самой заявке не меняется (разве что клиент сам передумает "мне не нужно 10, мне нужно 12!"), изменяется количество и состав привязанных к заявке документов. У каждого документа свой жизненный цикл (скажем, "накладная на закупку" тоже породит "складской резерв", когда товар реально будет закуплен и принят на склад). ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 09:49 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ПомидорCane Cat FisherВсе верно сказано. Позиция в заявке, что кто-то хочет 10 стульев - это хорошо, но это только начало бизнес-процесса. Это лишь зафиксированнное желание. Жизнь сложнее: на основании заявки будет несколько договоров на поставку (это к тому, что поставщик обязуется поставить 4 сразу а 6 потом). По каждому исполненному договору - приходные накладные, и вот стулья на складе. Потом в подотчет к пользователям, в учет как основные средства (или как малоценка, ее можно учитывать просто как материалы на складе), потом списание... И все на основании той заявки... Какая часть структуры непонятна? Структура таблиц в базе данных. Можете привести пример структур таблиц чтобы сохранялась история перемещения позиций с разбивкой их на более мелкие части в какой то момент и объединением этих мелких частей обратно на большие? Таблица Заявки( ЗаявкаID Номер Дата ОтделID) Заявка № 10 от 01.04.2017 от Отдела кадров Таблица ДеталиЗаявки( ДетальЗаявкиID ЗаявкаID Товар Количество) Стулья, 10 шт Таблица ДоговораНаПоставку( ДоговорID Номер Дата ПоставщикID ПланируемаяДатаПоставки) --при желании можно отсюда убрать, и впихнуть ее в каждую позицию Договор № 100 от 20.04.2017 с мебельной фабрикой "Рога и Копыта", до 01.10.2017 Таблица ДеталиДоговора( ДетальДоговораID ДоговорID Товар Количество ) В одном или нескольких договорах, но будут две позиции: Стулья, 4 шт, до 01.10.17 Стулья, 6 шт, до 01.11.17 ТаблицаСвязиДеталейПозицийЗаявокИДоговоров( ДетальДоговораID ДетальЗаявкиID ) детали заявок и договоров связаны как N:N, потому что могут быть ситуации, как описано: из одной позиции заявки будут несколько позиций договоров с разными сроками (может даже в разных договорах, у разных поставщиков). А может наоборот: три отдела составили три заявки по 10 стульев каждый, а снабженцы составили из них один договор, одну позицию договора на 30 стульев сразу. Дальше идут приходные накладные, там все аналогично, суть в том, что позиции накладной связаны с позициями договора. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 10:28 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Cane Cat Fisher, Помидор Да, логически это первое что напрашивается. Статусов сейчас штук 8. Если позиция будет вот так разбиваться при каждом своем новом статусе (это в самом худшем случае), то в какой то момент состояние изначальной позиции будет выглядеть примерно так: 2 штуки на складе; 1 штука в дороге; 3 штуки доставлен клиенту; ... . И все это только одна позиция в заявке. То есть система должна сохранить начальный и дальнейшие позиции при разбиение на под позиции. Как я понял, автору нужно отслеживать фактическое движение товара, а не запланированные поставки по договору ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 10:39 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  kernACane Cat Fisher, Помидор Да, логически это первое что напрашивается. Статусов сейчас штук 8. Если позиция будет вот так разбиваться при каждом своем новом статусе (это в самом худшем случае), то в какой то момент состояние изначальной позиции будет выглядеть примерно так: 2 штуки на складе; 1 штука в дороге; 3 штуки доставлен клиенту; ... . И все это только одна позиция в заявке. То есть система должна сохранить начальный и дальнейшие позиции при разбиение на под позиции. Как я понял, автору нужно отслеживать фактическое движение товара, а не запланированные поставки по договору Запланированные поставки он тоже хочет отслеживать, просто утаивает это от нас. Ведь если пользователь написал в заявке 10 стульев, ему же интересно - заказаны они уже у поставщика, или заявка в столе у снабженца застряла. А что до дальнейшего движения - после приходной накладной будут документы - перемещение в подотчет, затем - списание. Здесь уже позиции повязаны через партию на складе. И тогда запросом можно получить, то что желает автор: заявлено 10, из них заказано 6 (есть договор), 5 пришло на склад (есть накладная) 1 уже у клиента (есть перемещение в подотчет, самый шустрый прибежал и забрал). Единственное, что я не уверен - каким документом лучше зафиксировать, что товар "в дороге". Как это у них построено сейчас? В крайнем случае, можно псевдодокумент сделать - "Сведения об отгрузке в путь". ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 10:57 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  kernAКак я понял, автору нужно отслеживать фактическое движение товара, а не запланированные поставки по договоруДвижение обычно происходит в разрезе договора и возможно - заявки. Договоров может быть несколько на один и тот же товар. В случае любого спора с поставщиком всегда нужно знать структуру спора: по какому договору/заявке/счету условия не выполнены. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 11:00 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  [quot Cane Cat Fisher]kernACane Cat Fisher, пропущено... Единственное, что я не уверен - каким документом лучше зафиксировать, что товар "в дороге". Как это у них построено сейчас? В крайнем случае, можно псевдодокумент сделать - "Сведения об отгрузке в путь". Перемещение я вижу себе так: таблицу с описанием товара (ТоварTypeID, Марка, ТТХ ); Таблица товаров (ТоварID, СерийныйНомер ) Таблица Cостояний - (склад, перемещается, доставлен) (СостояниеID, ОписаниеСостояние) Таблица Cостояний Товара (ТоварID, СостояниеID ) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 11:32 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Cane Cat FisherЗапланированные поставки он тоже хочет отслеживать, просто утаивает это от нас. Ведь если пользователь написал в заявке 10 стульев, ему же интересно - заказаны они уже у поставщика, или заявка в столе у снабженца застряла. Вот список статусов: Новая - отдел продаж создал заявку на поставку. На складе - отдел склада помечает то что есть в наличие на складе, указывает нужное количество. Выход - отдел склада отгружает товар клиенту. Закупить - отдел склада помечает что надо купить отделу закупок. В пути - отдел закупок договаривается с поставщиками, и отмечает какие товары уже в пути к ним. Доставлено - отдел склада получает товары от поставщика. Завершено - Когда клиент получил товар. Отмена - отмена всей заявки, или одного или больше позиции, или частично (количественно) позиции. Вы все правильно поняли. Чтобы было возможность просмотреть состояние как всей заявки, так и по отдельным позициям и подпозициям. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 12:41 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  kernAПомидор, по логике, добавить состояние для каждого элемента(стул) заказа и отслеживать по отдельности. В зависимости от наименьшего состояния элемента будет определяться статус заявки. Да, так произойдет наихудшем случае, но изначально вот так следить за каждым элементов в позиции это лишняя работа. Не проблема когда 3 штуки, но это большая проблема уже при большем количестве. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 12:45 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ПомидорkernAПомидор, по логике, добавить состояние для каждого элемента(стул) заказа и отслеживать по отдельности. В зависимости от наименьшего состояния элемента будет определяться статус заявки. Да, так произойдет наихудшем случае, но изначально вот так следить за каждым элементов в позиции это лишняя работа. Не проблема когда 3 штуки, но это большая проблема уже при большем количестве. Вы же понимаете, если делать учёт по операциям, то набор товаров в процессе движения будет меняться- что то повредится при перевозке, что то останется на складе, что то неотгруженным. При составлении рекламации придётся указывать позиции повреждённых товаров и тп. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 14:56 | 
  
  
  
   | 
||
| 
 
Схема базы данных заявок и позиций со статусом 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ПомидорCane Cat FisherЗапланированные поставки он тоже хочет отслеживать, просто утаивает это от нас. Ведь если пользователь написал в заявке 10 стульев, ему же интересно - заказаны они уже у поставщика, или заявка в столе у снабженца застряла. Вот список статусов: Новая - отдел продаж создал заявку на поставку. На складе - отдел склада помечает то что есть в наличие на складе, указывает нужное количество. Выход - отдел склада отгружает товар клиенту. Закупить - отдел склада помечает что надо купить отделу закупок. В пути - отдел закупок договаривается с поставщиками, и отмечает какие товары уже в пути к ним. Доставлено - отдел склада получает товары от поставщика. Завершено - Когда клиент получил товар. Отмена - отмена всей заявки, или одного или больше позиции, или частично (количественно) позиции. Вы все правильно поняли. Чтобы было возможность просмотреть состояние как всей заявки, так и по отдельным позициям и подпозициям. Насколько я понял, вы не для себя покупаете, а торгуете с клиентами. Тогда все то что я говорил остается, только убирается перемещение в подотчет и списание, а вместо него появляется расходная накладная - отгрузка клиенту, опять же связанная с позициями заявки. И по наличию документов запросом легко отслеживается статус каждой позиции. Если решите, что запросы сложные - можно посадить поле статуса в деталь заявки явном виде, и заполнять триггерами, по мере проведения соответствующих документов. Но это если статусы уже устоялись, а если часто их пересматривать и новые придумывать - замучаетесь сопровождать. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 15.06.2017, 15:57 | 
  
  
  
   | 
||
| 
 | 

start [/forum/moderation_log.php?user_name=%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%81%D1%83%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F.]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    12ms | 
get settings:  | 
    8ms | 
get forum list:  | 
    10ms | 
check forum access:  | 
    2ms | 
check topic access:  | 
    2ms | 
track hit:  | 
    36ms | 
get topic data:  | 
    11ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    52ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 438ms | 
| total: | 584ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.