Len
Гость
|
|
« : 26-03-2007 08:18 » |
|
Есть две таблицы Расходная накладная(Номер, Дата, Id_Продавца, Id_Покупателя,Id_Товара) и Товар(Id_Товара, Наименование). В форме расходная накладная с помощью DBLookupComboBox выбираю код нужного клиента его данные проставляются в соответсвующих DBEdit-ах, а когда нужно выбрать товар для реализации, тут возникает вопрос, а ведь товар может быть не один, а несколько видов, как их отобразить на форме и прикрепить к данной накладной?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 26-03-2007 08:28 » |
|
Создаешь таблицу РасходнаяНакладнаяТовар(НомерРасходной,Id_Товара,....) Отдельным гридом бросаешь на форму Расходной накладной и... забываешь о своих проблемах
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #2 : 26-03-2007 08:35 » |
|
А зачем же тогда таблица Товар? Как я понимаю расходная накладная призвана для того, чтобы минусовать количество товара из таблицы Товар.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 26-03-2007 08:54 » |
|
таблица Товар содержит информацию о Товаре (в том числе и о количестве, если ты это так понимаешь) Расходная накладная содержит информацию о контрагенте и товарах (заметь - о товарах). Исходя из данных условий и создается таблица РасходнаяНакладнаяТовар, которая привязывается к Расходная накладная, а каким образом ты будешь вести учет товара, это уже другой вопрос. Например, в случае вставки(на этапе редактирования) в таблицу, товар резервируется, в случае записи в таблицу товар списывается
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #4 : 26-03-2007 09:18 » |
|
Я все-таки немного недопонимаю... Можете подробно описать Ваши действия по созданию Накладной более подробнее... Буду признателен...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 26-03-2007 09:48 » |
|
Len, я вообще не имею понятия о Расходной накладной, а тем более ее создаю не я, а Вы Я сужу только о поставленной задаче Прошу описать, что в Расходной накладной должно присутствовать, И как Вы представляете, вообще, форму расходной накладной? Возьмите стандартную (типографскую) форму и создайте аналогичную, тогда Вы, надеюсь, поймете о чем я говорю. А вот работа с товаром, это уже вопрос о функциональности, на нем в данный момент заморачиваться не будем
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #6 : 26-03-2007 10:31 » |
|
Я опишу подробнее все мои действия: Есть три таблицы: Конрагенты, Товар и Расх. накладная. Форма выглядит следующим образом, DBEdit(Номер) DBEdit(Дата) DBLookupComboBox(Код клиента) когда код выбирается, то данные этого контрагента проставляются в DBEdit-ах Далее по моим замыслам товар который нужно реализовать заполняется в DBGrid-е, но этот товар я хочу выбирать из уже имеющейся таблицы Товар, можно ли так сделать нажимаешь кнопку ТОВАР, появляется форма Товар и двойным щелчком на нужной строке данные проставляются в первой строке DBGrid и так выбираем товары для реализации в данной накладной...
|
|
« Последнее редактирование: 26-03-2007 10:33 от Len »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #7 : 26-03-2007 11:38 » |
|
Len, я ничего не понимаю в DBEditах и DBLookupComboBoxах, в этом также ничего не понимают (З)аказчики. Таблица Расходная накладная (РН) - производная от двух таблиц: Контрагенты (К) и Товар (Т). Табл. РН относится к табл. К, как много к одному. ( т.е. для одного К может быть несколько РН) Табл. Т относится к табл РН, как один ко многим (т.е. в одной РН много Т) Кстати в приведенном мною описании З тоже ничего не понимают. Теперь по сути. Создав на форме заполнения РН, отдельную табличку для заполнения информации о Т, ты также должен создать интерфейс выбора товара. Если в случае выбора К ты пользуешься выпадающим списком (я так интерпретировал DBLookupComboBox), то в случае заполнения данных о Т, тебе нужно выводить Большой список, что не есть совсем удобно, поэтому здесь удобно, на мой взгляд, использовать окно выбора. Кроме того, окно выбора можно использовать и при выборе К Итак. 1. Номер расходной накладной вводим ручками, или автоматически генерируем. NРН= Select max(Номер)+1 from Расходная накладная;
2. Дату накладной вводим руками или автоматически генерим. 3. Данные о клиенте вводим путем выбора К из таблицы К . Назовем это "Выбрать". Клиент = select * from К where idK=&Контрагент
4. Данные о товаре вводим путем выбора Т из таблицы Т. Но назовем "Добавить". Т1= здесь мне лень придумывать код :) Т2= здесь мне лень придумывать код :)
Соответственно, "грид" Товар, "обвешиваем" удобным интерфейсом (кнопочки "Добавить", "Удалить" и пр.) Выбор из таблиц организовываем в виде окон( скорей всего модальных, хотя и здесь могут быть варианты.) Соответственно эти окна, на мой взгляд должны быть одного класса с формами ввода клиента или товара (в случае отсутствия необходимого элемента должна быть возможность добавить новый элемент, но это уже развитие интерфейса и к теме не относится) При сохранении РН - сохранение данных происходит в двух таблицах (РН и РасходнаяНакладнаяТовар (РНТ) ) Т.е. я так понимаю, что вот здесь и возник вопрос, а что это за таблица РНТ. Структуру таблицы я уже приводил.
|
|
« Последнее редактирование: 26-03-2007 12:07 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #8 : 26-03-2007 11:55 » |
|
Как я понял Расходная накладная товар нужна как переходная таблица от Товара к Расходным накладным, чтобы и сделать это соответствие один ко многим?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #9 : 26-03-2007 13:15 » |
|
Как я понял Расходная накладная товар нужна как переходная таблица от Товара к Расходным накладным, чтобы и сделать это соответствие один ко многим?
в общем-то да Но эта таблица не имеет смысла без существования таблицы РН
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #10 : 26-03-2007 14:53 » |
|
<4. Данные о товаре вводим путем выбора Т из таблицы Т. Но назовем "Добавить". Код: Т1= здесь мне лень придумывать код Т2= здесь мне лень придумывать код Соответственно, "грид" Товар, "обвешиваем" удобным интерфейсом (кнопочки "Добавить", "Удалить" и пр.)> Вот здесь у меня и возникла затруднительная ситуация. Т.е при нажатии кнопки Добавить всплывает форма Товар(это у меня получается), далее нужно написать код для оперции OnDblClik(двойной клик), чтобы при клике мышкой данная строка вставилась в таблицу Grid на форме Расх накл? А какой код не знаю...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #11 : 26-03-2007 15:09 » |
|
При даблклике закрываешь окно и возвращаешь в гридТовар запись о Товаре Т.е. функция(метод) закрытия окна должны возвращать определенную структуру Я бы возвращал полную запись (или ссылку на запись) (Id_Товара, Наименование,...), а уже потом бы в форме РН выбирал нужные элементы В случае вызова формы Товар независимо - возвращать можно как, например, текущую, или нулевую ссылку(пустую запись)
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #12 : 27-03-2007 06:59 » |
|
Ну? где застряли?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #13 : 27-03-2007 07:13 » |
|
давай разберемся по порядку... правильно ли я сделал? В таблице Расх накл(РН) есть поля: Номер*, Дата, Код клиента, Код РНТ. В таблице Товар есть поля: Артикул*, Наименование, Цена, Количество, Номер ПН(прих накл). Првильно ли я связал таблицы: Товар->РНТ->РН. Какие поля надо создать в таблице РНТ(расх накл товар)? Код РНТ, Код РН, артикул, количество? Что нибудь не так?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #14 : 27-03-2007 08:28 » |
|
давай разберемся по порядку... правильно ли я сделал? В таблице Расх накл(РН) есть поля: Номер*, Дата, Код клиента, Код РНТ. В таблице Товар есть поля: Артикул*, Наименование, Цена, Количество, Номер ПН(прих накл). Првильно ли я связал таблицы: Товар->РНТ->РН. Какие поля надо создать в таблице РНТ(расх накл товар)? Код РНТ, Код РН, артикул, количество? Что нибудь не так?
Давай создадим модель твоих объектов Товар = объект { IDтовар not null, Артикул not null, Наименование, Цена :=0, Количество:=0 } Клиент = объект { IDКлиент not null, Наименование, Адрес, Доп.реквизиты } РасходнаяНакладная = объект { IDРН not null, Номер not null, Дата, IdКлиент := null, IDРНТ :=null /*этого поля может не быть, скорее всего не должно быть - вскрытие покажет :) */ } РасходнаяНакладнаяТовар = объект { ID_РНТ not null, ID_Товар. КоличествоТовара, ОтпускнаяЦена /* заложим на будущее */ }
Опишем процедуру заполнения РН Ввод номера РН Ввод даты отгрузки(выдачи товара) Ввод данных о Клиенте путем выбора из объекта Клиент Заполнение данных о товаре, путем добавления из объекта Товар
Опишем процедуру сохранения РН Сохранить необходимые реквизиты в таблице РН (номер, дата, клиент и т.д.) Сохранить данные о выбранных товарах в табл РНТ
Опишем процедуру просмотра РН Выбор Номера Расходной Накладной Выбор товаров из таблицы РасходнаяНакладнаяТовар по номерурасходной
Поля IDРНТ :=null /*этого поля может не быть, скорее всего не должно быть - вскрытие покажет */ все таки не нужно, так как информация о принадлежности к РН находится в табл. РНТ
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #15 : 27-03-2007 08:52 » |
|
Итак модель объектов я задал. Теперь процедура заполнения РН: ввод номера(это поле принадлежит РН-номерРН), вводим дату(тоже заполняется поле РН-датаРН), ввод данных о клиенте(заполняется поле РН-код клиента). С этим все понятно. "Заполнение данных о товаре, путем добавления из объекта Товар". Давай здесь остановимся поподробнее...Как это будет выглядеть на форме?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #16 : 27-03-2007 09:17 » |
|
"Заполнение данных о товаре, путем добавления из объекта Товар". Давай здесь остановимся поподробнее...Как это будет выглядеть на форме?
Ну... это мы уже проходили на форме у тебя существует грид Товары к этому гриду привязываешь интерфейс (добавить, удалить, просмотреть и т.д. запись) Тогда опишем процедуру заполнения грида Товар. Сделай это сам
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #17 : 27-03-2007 09:33 » |
|
В шапочной части формы Номер, Дата, Код клиента, потом ниже я добавляю Грид, его привязывать к таблице Товар? Тогда выставляется весь ассортимент...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #18 : 27-03-2007 10:09 » |
|
Грид Товар связывается не с табл Товар, а с табл. РНТ, выборка из таблицы делается по номеру РН
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #19 : 27-03-2007 10:33 » |
|
Здесь бы еще описать процедуру заполнения грида РНТ Показать Товар Выбрать Товар (вот здесь тоже могут быть варианты, например выбор одного или нескольких товаров) Заполнить грид
А потом будет действовать процедура записи РН
офтоп.... Т.е. по мере развития проекта запросы Заказчика могут расширяться
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #20 : 27-03-2007 11:03 » |
|
Грид Товар связал с таблицей РНТ, появилось 4 столбца: Номер РНТ, Код товара(можно в качестве кода сделать артикул), количество и отпускная цена. А наименования товара высвечиваться не будут, только код товара (артикул)? Таблицу РНТ связал с главной таблицей РН. Над гридом поставил 2 кнопки: Добавить(т.к. может потребоваться вставить не один вид товара) и Удалить. Хотелось бы, чтоб при нажатии кнопки Добавить появлялась форма с таблицей товара.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #21 : 27-03-2007 11:48 » |
|
Хотелось бы, чтоб при нажатии кнопки Добавить появлялась форма с таблицей товара.
Ну? Так сделай это 1. чем Кнопка, например, Расходная накладная отличается от кнопки Добавить в гриде РНТ? (кроме размера и цвета ) 2. Чем форма ввода Товара, будет отличаться от формы Выбора товара? 3. Что возвращает форма ввода Товара, что возвращает форма Выбора товара? ЗЫ, Len, пойди отдохни, ты зациклился - проект подождет. В кино сходи, медленно прокрути на досуге (не за компом) всю технологию, и оно само прийдет
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #22 : 27-03-2007 12:49 » |
|
Я и сам не рад, но диплом то не подождет... Скоро сдавать, а я сижу и тупею на глазах... Хорошо кнопкой Добавить модально вызываю форму Выбора товара, это я сделал. На форме Выбора товара поставить кнопку Выбрать? Это тоже сделал... Я просто не могу дотукаться что должно произойти при её нажатии. А! Должен проставиться код товара(артикул) в гриде Товар на форме расх накладной? А столбцы номер РНТ, количество и отпускная цена заполняем вручную? Так?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #23 : 27-03-2007 13:18 » |
|
... Должен проставиться код товара(артикул) в гриде Товар на форме расх накладной?... Замечательно! ... А столбцы номер РНТ, количество и отпускная цена заполняем вручную? Так? нет! никакого номера! РНТ, откуда он, в модели объекта? ты (или я )его не описывал. Количество! А как же, только руками, но нужно обязательно проверять на наличие. Отпускная цена - это так условная весчь - наверное должна быть
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #24 : 27-03-2007 15:47 » |
|
Вот и возникает мой главный вопрос. "кнопкой Добавить модально вызываю форму Выбора товара, это я сделал. На форме Выбора товара поставить кнопку Выбрать". А какой код прописать для кнопки Выбрать?
|
|
|
Записан
|
|
|
|
Len
Гость
|
|
« Ответ #25 : 27-03-2007 15:56 » |
|
... А столбцы номер РНТ, количество и отпускная цена заполняем вручную? Так? нет! никакого номера! РНТ, откуда он, в модели объекта? ты (или я )его не описывал. Нет, не номер а код РНТ. Его не надо в гриде демонстрировать? Это поле ведь ключ, как оно будет заполнятся?
|
|
« Последнее редактирование: 27-03-2007 16:03 от Len »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #26 : 27-03-2007 16:30 » |
|
Кнопкой Выбрать возвращать данные о товаре (см. ответ #11) ведь ты при закрытии дочернего окна должен вернуть ЧТО-ТО в родительское окно. Вот это ЧТО-ТО и есть данные о товаре(товарах)
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #27 : 27-03-2007 16:34 » |
|
Код РНТ в объекте по привычке образовался каюсь это псевдо поле, в гриде его можно не выводить
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Len
Гость
|
|
« Ответ #28 : 28-03-2007 08:17 » |
|
Для кнопки Выбрать написал такой код, из формы Товар поле артикул присваиваю полю артикул в гриде формы расх накл. Form14.Table1.FieldByName('Articul').AsInteger:=Form16.DBGrid1.Fields('Articul').AsInteger; /Form14-форма товар, Form16-форма РН/ Form14.Close; /закрываем форму Товар/ Это чёй-то не работает...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #29 : 28-03-2007 14:46 » |
|
Len, Что возвращает функция Close? Ты должен вернуть текущую запись из формы выбора товара смотри сюда код на бумаге Вызвать функцию ВыборТовара /* кнопка Добавить на гриде Товар в РН */ функцию ВыборТовара { ОткрытьФорму(ВыборТовара,Результат) Добавить(ГридТовар,Результат) } ОткрытьФорму(ВыборТовара,Результат) { .... Результат = ТекущаяЗапись(ГридВыборТовар) }
Теперь понятно?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|