LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Горизонта...
 Тема: Горизонтальное вычитание множества полей по усл!!!
 
 15.06.2007 21:09:05
All
4316 сообщения
1-ый


Тема: Горизонтальное вычитание множества полей по усл!!!
Здравствуйте!!!

Постановка задачи следующая. Есть таблица "rezult", где есть следующие поля:

id - лицевой счет
dolg - сумма долга
nac50 - начисление за 50-й период (например за декабрь 2004 г.)
nac49 - начисление за 49-й период
.... и т. д.
nac1 - начисление за 1-й период.

Соответственно по истечению января 2005 г. появится поле nac51.

Надо из долга вычитать начисления из каждого поля до тех пор пока долг не станет отрицательным числом по каждому лицевому счету, т.е.:

itogo=dolg-nac50-nac49-...>0,
например: dolg=500; nac50=300; nac49=100; nac48=150 и т.д., тогда 500-300-100=100, а если вычитать nac48, то уже будет отрицательное число и перебор полей по этой строке надо прекратить и в результате вывести число 100.

В итоге надо вывести поля (id, itogo, kolvo)
kolvo - это поле, где выводится количество полей nacXXX, которое участвовало в вычитании для получения результата.

Как это сделать? Очень нужно?

С уважением, Игорь!!!


P.S. Общий раздел по таблицам
Автор: Игорь от 0:00:00 Источник ...
 15.06.2007 21:09:05
All
4316 сообщения
1-ый


RE: Горизонтальное вычитание множества полей по усл!!!
1. Надо использовать функции DSum и DCount в запросе на выборку. Примерно так,
itogo = dolg - DSum("[nac]" & [Период];"rezult"). Далее из этого запроса отобрать запись с минимальным отрицательным значение itogo.
2. Или дабавить дополнительное поле, куда записывать результат начислений.


P.S. Общий раздел по таблицам
Автор: Admin от 0:00:00 Источник ...
 15.06.2007 21:09:05
All
4316 сообщения
1-ый


RE: Горизонтальное вычитание множества полей по усл!!!
Я переделал структуру БД так как понял, что она организована не совсем правильно и теперь она выглядит следующим образом. Значит две таблицы. В первой хранятся поля "id" и "dolg". Во второй таблице хранятся поля "id", "nac", "mes" (новое поле, которое обозначает в каком месяце было занесено "nac"). Создаю запрос на основе объединения 2-х таблиц по полю "id" и получаю результат в виде таблицы с полями "id","mes","dolg","nac", где "id" отсортировано по возрастанию, а поле "mes" - по убыванию. Теперь надо написать программный код, который будет обрабатывать каждый id и принадлежащие ему множества записей поля "nac" по формуле (dolg-nac)>0. Так как я еще в этом деле совсем совсем начинающий, то попрошу привести часть кода для обработки записей целиком. Я так понимаю, что начать надо с этого:

Private Sub Кнопка16_Click()
On Error GoTo Err_Find01_05
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim str As String
Dim lngRecordCount As Long
Dim strSQL As String
'Формируем строку SQL
strSQL = "SELECT * FROM rezult" 'rezult - запрос из 2-х таблиц
Set db = CurrentDb
'Открывем набор записей на основе строки SQL
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

----------- Что здесь должно быть? --------------------

rs.Close
db.Close
Exit_Find01_05:
Exit Sub
Err_Find01_05:
MsgBox Err.Description
Resume Exit_Find01_05
End Sub

С уважением, Игорь!!!



P.S. Общий раздел по таблицам
Автор: Игорь от 0:00:00 Источник ...
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Горизонта...
ПоискПоиск  Список форумовСписок форумов  
right