Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отобразить долг на форме оплата
 
 автор: OlegZa   (13.07.2008 в 10:29)   личное сообщение
 
 

Аксесс 2000.
Подскажите плз верным ли путем иду.
У меня есть таблицы: "Отгрузка" (поля: [Номер накладной],[Дата],[Клиент]); "Отгрузка подробности" (поля: [Номер накладной],[КодПродукции],[Количество],[Цена]) и таблица "Оплата" (поля: [Дата оплаты],[Клиент],[Сумма])
Хочу сделать форму, где отображался бы долг по каждому клиенту и можно было бы ввести сумму оплаты на каую-то дату (долг при этом в идеале должен обновиться). После долгого мозгового штурма решил идти таким путем:
1)Создавать запросом на добавление новую таблицу "Долги"([Клиент],[Сумма]). (повесить создание на событие открытия формы).
2)Прилинковать её в SQL инструкции формы к таблице "Оплата", связав по полю [Клиент].
3)Обновлять выполнением запроса на обновление по событию "выход" из поля [Сумма] таблицы "Оплата"
4)Удалять таблицу по закрытию формы.
Верный ли это путь?
У меня получается, что в получившуюся форму никаких данных не ввести. Почему?
Верен ли этот путь в принципе, или для решения поставленной задачи надо двигаться куда-то не туда, а на этом пути поставить крестик?
Всем кто с чем-то подобным сталкиваля и откликнется - заранее куча благодарностей.

  Ответить  
 
 автор: osmor   (14.07.2008 в 10:16)   личное сообщение
 
 

На мой взгляд путь с созданием таблицы не совсем верный.
Лучше считать сумму оплаты "на лету", или если объемы большие создать "регистр" с суммами оплат по каждому клиенту.
киньте кусок базы с таблицами и немного данных в них. Лень руками набивать

  Ответить  
 
 автор: OlegZa   (14.07.2008 в 17:44)   личное сообщение
40 Кб.
 
 

Osmor, спасибо за отклик!
Из базы вырезал кусок с пробой реализации моей идеи, но, как и писал - она не работает почему-то.
Не очень понятно из Вашего сообщения, что значит "Сумму оплаты считать "на лету"". (чего её считать - она просто цифрой так и вводится). М.б. имелось ввиду, что "на лету" пересчитывать сумму долга.
Если это не очень затруднит - поясните то, что будете делать (лучше ссылку на то, где об этом можно что-то прочитать). Готовое решение - это, конечно неплохо, но хочется не "поиметь" что-то, а научиться.
С уважением.

  Ответить  
 
 автор: osmor   (15.07.2008 в 16:30)   личное сообщение
 
 

что-то я никак е пойму логику ваших таблиц.
Долг это что?
это сумма стоимости товара по клиенту из ОтгрузкаПодробности (через Отгрузка) минус сумма оплат по клиенту?
Объясните подробнее что, где, как.

  Ответить  
 
 автор: OlegZa   (15.07.2008 в 18:05)   личное сообщение
 
 

Доброго времени суток!
По-моему свё правильно. Долг= Сумма стоимости товара по клиенту (цена*количество) из "отгрузка подробности" (через "отгрузку") минус "Сумма оплат" по клиенту.
А что-то не так? Вроде всё правильно считаю?
Взял на сумму = получился долг.
Отдал деньги = минус из долга.
У меня в запросе на выборку "Долги" так и есть:

Долг: Round(Sum([Количество]*[Цена])-Sum([СуммаОплачено]))

только ещё округляю - а то там сотые копеечек очень подлые иначе вылезают.
По-моему всё правильно.

  Ответить  
 
 автор: osmor   (16.07.2008 в 09:40)   личное сообщение
33 Кб.
 
 

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

В общем сделал в рамках тех таблиц которые были.
Сумма долга считается запросами и выводится в форму через Dlookup
На больших объемах будет притормаживать.
Если хотите через промежуточную таблицу, то для заполнения таблицы переделайте мой запрос qCredit в запрос на добавление.
Но на больших объемах промежуточная таблица тоже не спасет, да еще и даст всякие вариации ошибок при много пользовательской работе.
При больших объемах нужно "вводит" регистр в котором храниться сумма долга на какую-то временную точку, а уже от нее считать долг на нужную дату.
Почитайте мой ответ в этой ветке
http://hiprog.com/forum/read.php?id_forum=1&id_theme=3204&page=1

  Ответить  
 
 автор: OlegZa   (16.07.2008 в 13:50)   личное сообщение
 
 

Оsmor, огромное спасибо!
Сейчас полезу разбираться.
А насчет Nz() - да. Это да - "лоханулся" - забыл просто. Спасибо ещё раз.
Про регистры мне, наверное, пока рановато - но прочитаю и проштрудирую обязательно. Лишним не будет.
Немного непонятно насчет общей таблицы для учета денежного прихода и расхода. Если честно - не понял саму идею. Сумму что ли по накладной считать и потом сохранять? Зачем? Её же посчитать можно. Или я совсем не туда кумекаю, или не понимаю что-то? М.б. это для того, чтобы именно с долгами попроще было разбираться? Я почему-то думал, что если так сделать - (сохранять то, что считаеся) будет неправильно. Если ошибаюсь - поправьте плз.
Огромное спасибо за потраченное на меня время... Очень постараюсь, чтоб не "впустую".

  Ответить  
 
 автор: OlegZa   (16.07.2008 в 14:53)   личное сообщение
 
 

Разобрался. Приделал к своей базе и минут 5 "игрался" - получилось просто супер. Теперь немножко под себя переделаю (думаю придумать как-то форму в ленточную переделать - чтоб всех должников видеть враз, списки кое где посортирую, кнопку пересажу и т.д.) - и "в бой".
Особенно впечатлила сборка строки в DLookUp-е в поле "долг" на форме. Это ж сколько надо хелпов перелопатить, чтобы так делать? Главное - просто всё как...
Если не секрет, программирование -это у Вас хобби или работа такая?
С превеликим удовольствием отблагодарил бы Вас чем смогу. Если подскажете как - научите - буду признателен.
Засим откланяюсь. Полезу переделывать.
Ещё 500 раз оргомное спасибище!!!

  Ответить  
 
 автор: osmor   (16.07.2008 в 15:58)   личное сообщение
 
 

Если не секрет, программирование -это у Вас хобби или работа такая?
все в одном флаконе
С превеликим удовольствием отблагодарил бы Вас ...
Ещё 500 раз оргомное спасибище!!!

Уже

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList