Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильное сохранение при Мастер- Детаил [D7, FireBird]


Страницы:   1 2 3 4

Xmen ©   (2009-03-26 07:16:00) 

Привет мастерам.
Делаю программу для склада. Сделал таблицы для прихода товара. Установил связь мастер - детаил. Вопрос в том что если создать форму и поместит в нем 2 грида, один мастер другой детаил то при вводе мастер все нормально но в детаил таблицу ввод не получается изза того что не сохранен данные в мастер таблице. Как можно сохранит сразу и мастер и детаил без commit  таблицы мастера?


Xmen   (2009-03-26 15:19:00) [41]


> Виталий Панасенко   (26.03.09 14:54) [33]

Но для этого нужно сохранить мастер таблицу


Sergey13   (2009-03-26 14:58:00) [42]

> [30] Xmen   (26.03.09 14:05)
> Вед id генерируется после сохранения поля в мастере.

ИД не генерируется. Генерируется значение генератора (тафтология однако 8-) которое прописывается в ИД. Когда генерируется - тебе решать.


Виталий Панасенко   (2009-03-26 14:54:00) [43]


> Xmen   (26.03.09 14:05) [30]

Так, а что мешает этот самый ИД(идентификатор) получить? по-моему, абсолютно ничего...


Сергей М.   (2009-03-26 14:47:00) [44]


> для склада .. нужно организовать минимум 5 таблиц


Если шарашкина контора, то и одной достаточно.


Sergey13   (2009-03-26 14:13:00) [45]

> [29] Xmen   (26.03.09 13:59)
> Или можно по другому?

Нужно!
1. Документы на движение.
2. Товары в документах на движение
3. Операции в документах на движение - это справочник на несколько записей, где будет ИД, название операции и поле направления движения (+1 или -1), на которое надо умножить количество товара, что бы оно прибавилось или списалось с остатка.


Xmen   (2009-03-26 14:05:00) [46]


> Anatoly Podgoretsky ©   (26.03.09 13:56) [28]
> Нет бесхозным записям!Сначала мастера, а потом детали.Хозяин
> без деталей может быть, а наоборот это уже бардак, по другому
> порушеная база.И все речь вокруг транзакций, но мастера
> вперед.

Я тоже так думаю но как быть? Без получения id значения невозможно сохранить детаил поле. Вед id генерируется после сохранения поля в мастере.


Xmen   (2009-03-26 13:59:00) [47]


> Сергей М. ©   (26.03.09 12:23) [26]
> > для каждого запися> номер накладного"Запись" и "накладная"-
>  она вообще-то женского рода).. По кр.мере, в русском языке

Наверно плохо знаю.

> Sergey13 ©   (26.03.09 12:11) [25]
> > [24] Xmen   (26.03.09 12:08)С чего бы это?

Ну для склада я понимаю нужно организовать минимум 5 таблиц.
1. Приход. Номера накладных, договоров, фирмы продавца и др.
2. Приход по товаров. Наименование товаров, единицы, цен и сумма.
3. Расход.
4. Расход по товаров. Наименование товаров, единицы, цен и сумма.
5. Книга движений.
Или можно по другому?


Anatoly Podgoretsky   (2009-03-26 13:56:00) [48]

Нет бесхозным записям!
Сначала мастера, а потом детали.
Хозяин без деталей может быть, а наоборот это уже бардак, по другому порушеная база.
И все речь вокруг транзакций, но мастера вперед.


Anatoly Podgoretsky   (2009-03-26 13:52:00) [49]


> 1c

dbf или ms sql или три кольца?


Сергей М.   (2009-03-26 12:23:00) [50]


> для каждого запис я


> номер накладно го


"Запись" и "накладная"- она вообще-то женского рода).. По кр.мере, в русском языке


Sergey13   (2009-03-26 12:11:00) [51]

> [24] Xmen   (26.03.09 12:08)

С чего бы это?


Xmen   (2009-03-26 12:08:00) [52]

Ну тогда для каждого запися нужно писать или указывать повторяющийся записей наименование поставщика, номер накладного, дату и др. для каждого запися.


Sergey13   (2009-03-26 11:00:00) [53]

> [22] MsGuns ©   (26.03.09 10:46)
> куда помещать "П" для приходов, "У" - возврат поставщику

Все таки правильнее наверное будет помещать туда ссылку на таблицу операций, ИМХО.


MsGuns   (2009-03-26 10:46:00) [54]

>Xmen   (26.03.09 10:26) [20]
>Как?

Добавить в таблицу документов поле "Тип документа", куда помещать "П" для приходов, "У" - возврат поставщику, "Р" - реализация, "В" - возвраты от покупателей, "С" - списание, "О" - переоценка(дооценка, уценка).. и поле "Баланс", содержащее фактически знак (1 или -1), задающий приход или списание на/с карточки. (Последнее необязательно если движение фиксируется на карточке уже с правильным знаком)


Sergey13   (2009-03-26 10:36:00) [55]

> [20] Xmen   (26.03.09 10:26)

Что как?


Xmen   (2009-03-26 10:26:00) [56]

> Sergey13 ©   (26.03.09 09:22) [14]
> + немного не по теме 8-)> [0] Xmen   (26.03.09 07:16)> Сделал
> таблицы для прихода товара.Удали ее или переименуй в таблицу
> ДВИЖЕНИЯ. А то еще придется создавать таблицы расхода, списания
> и т.д. и т.п.

Как?


MsGuns   (2009-03-26 10:05:00) [57]

>Xmen   (26.03.09 09:23) [15]
>Я пользуюсь FB1.5 для связи пользуюсь InterBase компонентой.

Вполне достаточно. ФИБплас сделан для криворуких и ленивых

>А как можно это тогда по другому сделать? Что можете посоветовать?

Делать по стандартной схеме, не выдумывая велоспипеда

1. Сначала добавляется запись в таблицу заголовков приходов (хотя стОит присушаться к совету использовать единые хранилища для всех типов документов).
2. Считывается значение ее идентификатора
3. Собственно "ставится" мастер-детальная форма, при этом мастер-запись уже есть в БД. Проблемы с "привязкой" умирают естественной смертью
4. Документ должен иметь флаг "проведен", т.е. ввод документа не является основанием для правки остатков и таким образом не "участвует" в БД. После того, как он полностью введен и проверен, он проводится - в этом случае в карточки товара прописываются соответствующие строки фактуры, а остатки корректируются . Для того, чтобы документ мог быть подправлен или удален, его следует "откатить" - в результате этой операции из карточек удаляются ссылки на этот документ, а товар возвращается (для приходных документов - снимается) с остатка

Все это имеется и вполне добросоветсно работает в 1С - если так уж неодолимо желание самому написать складскую прожку, имеет смысл хотя бы внимательно ознакомиться как это сделано там.


Сергей М.   (2009-03-26 09:59:00) [58]


> ЮЮ ©   (26.03.09 09:40) [16]
>
>


Как это не вставлена ?
Насколько я понял, вставлена, т.е. Post выполнен, но ТА еще не подтверждена (см. упоминание Commit)

Т.е. для вставки в подчиненную таблицу достаточно знать ID только что вставленной мастер-записи и выполнять вставку в подчиненную таблицу в той же ТА, в которой была выполнена вставка в мастер-таблицу.


Виталий Панасенко   (2009-03-26 09:40:00) [59]

Установить CashedUpdates=True в обоих НД.. для мастера ОТДЕЛЬНЫМ запросом получить ИД. Добавить в мастер, подставив полученный ИД. Сделать POST(данные при этом не будут записаны в БД). Заполнить деталь, подставив полученный ИД для мастера.. сделать ApllyUpdates для мастера, затем детали. что-то в этом виде.. где-то так.. либо без кеширования: всегда постить мастера, получить его ИД и далее использовать для детали


ЮЮ   (2009-03-26 09:40:00) [60]


> Ничто ведь не мешает получить значение генератора первичного
> ключа мастер-таблицы не в триггере на вставку, а перед вставкой
> в мастер-таблицу, т.е. прямым запросом к генератору на стороне
> клиента ..


У человека проблема не с первичным ключом, а с невозможностью вставить в детайл, пока не вставлена запись в мастер.

А вставлять сразу ему не нужно. Ему нужно вставить скопом: 1-у в мастер и несколько в детайл.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо