powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите реализовать алгоритм
25 сообщений из 41, страница 1 из 2
Помогите реализовать алгоритм
    #32563249
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте Люди!
Существует выполнение по договору, которое разбивается на выполнение по объектам по факту.
Существует оплата выполненных работ, которая идет одной суммой (SummaP).
Структура таблицы в которой содержаться данные:
idDog, Vipolnenie, DataV, idOb, Oplata
Задача. Распределить оплату программно по объектам, по которым есть задолженность.
Алгоритм представляю себе такой,
для всех объектов по договору считаю задолженность (Dolg)
Если SummaP >= Dolg по 1 объекту, тогда
Oplata = Dolg
SummaP1=SummaP-Oplata
Иначе
Oplata=SummaP
SummaP1=SummaP-Oplata

Все это в цикл,
SummaP1=0 конек цикла
А дальше, как в том анекдоте «нутром чувствую, что литр, а математически выразить не могу»
Т.Е. не знаю с какой стороны к этому подступиться
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563290
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub TraTaTa (ByVal SummaP as Double, idDog as String)
Dim db As Database: Set db = CurrentDb
Dim rs as Recordset: Set Rs = Db.OpenRecordset("SELECT idDog, Vipolnenie, DataV, Oplata WHERE ((idDog = '" & idDog & "'));", DbOpenDynaset)

With rs
Do While Not .EOF
.Edit
If SummaP >= !Dolg
!Oplata = !Dolg
Else
!Oplata = SummaP
End If
SummaP=SummaP-!Oplata
if SummaP = 0 Then
Exit Do

.Update
.MoveNext
Loop

If SummaP > 0 Then
MsgBox "Остались деньги на выпить и закусить в размере " & SummaP
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563307
Фотография neal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может ты имела ввиду
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Set Rs = currentdb.OpenRecordset("...")
Do while not (rs.EOF) and (SummaP >  0 )
    Dolg = ....  ' -- по i-му объекту  должно быть 0 или положительное '
    IF (Dolg >  0 ) Then
         IF (SummaP >= Dolg) Then
              RS.edit
              SummaP=SummaP-Dolg
              Rs!Oplata = Rs!Oplata+Dolg
              Rs.update
         Else IF (SummaP >  0 ) Then  '-- т.е. Dolg > SummaP > 0 '
              Rs.Edit
              Rs!Oplata = Rs!Oplata+SummaP
              SummaP= 0 
              Rs.update
        End if
    End if
    Rs.moveNext   '--переход к следующему '
Loop
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563309
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь!
Буду делать...
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563312
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ирча, а что в Уренгой уже регулярно поезда ходят? А до Пангод на поезде доехать можно? Или все так же, как и раньше вертушкой через Надым?
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563336
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Ирча

стройка?

1-й ворпрос - а надо ли "распределять"

может быть - Oplata в твоей таблице - вовсе не оплата, а цена вопроса?
тогда складывай цены вопроса и смотри против них сумму оплат по договору. Разница даст тебе величину задолженности (дебиторской/кредиторской).
Размазывать по стакану есть смысл, только если оплата постаканная.
Вообще же, размазывать - примерно так, как Rivkin Dmitry нарисовал.
Если только у тебя задача без приоритетов, или каких-нибудь специальных заковык, где явная "функция распределения" потребуется.

обозначился.

Все.
В дальнейшем участвовать не смогу.
по причине боления.
побег дальше болеть.

PS
всем привет
:))
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563365
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Rivkin Dmitry
Поезда до Уренгоя уже ходят, а вот На счет Пангод не скажу, потому что не знаю
Victosha1-й ворпрос - а надо ли "распределять"
Распределять Надо, потому, что есть господа инвесторы, которые такой отчет придумали
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563395
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha ,наверное, прав, и надо бы добавить в таблицу приоритет по idOb,
т е. еще одно поле инт, например, и в нем проставлять порядок объектов для оплаты. Тогда в запросе достаточно будет добавить сортировку по этому полю.
А что ты собираешься делать с остатком, если такой проявится?

А муксун и нельму купить в Уренгое можно? (на остаток, конечно :) )
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563502
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryА что ты собираешься делать с остатком, если такой проявится?
я заранее прослежу, чтобы SummaP была меньше или равна задолженности по договору, а остаток пойдет как аванс
Rivkin DmitryА муксун и нельму купить в Уренгое можно? (на остаток, конечно :) )
Смотря какой остаток...
Реально можно, но если интересует качество, то брать надо пока у нас холодно
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563572
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, все еще холодно? Пора бы и лету наступать. Помнится, снег по оврагам числа до 20 июня лежал, но на солнышке уже жарко становилось в середине июня ... Хотя не всегда! Комарики уже есть?

А код работает то? Я там End If и End With не проставил. Справилась?
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563587
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryЯ там End If и End With не проставил. Справилась?
Код пока смотрю.
Он работает, но делает не совсем то, пытаюсь наладить.
Endы все дописала
Rivkin DmitryА что, все еще холодно? Пора бы и лету наступать
У нас уже тепло, но потеплело очень резко. 6 июля была метель и -5, а сейчас 28 вот на рынке и смотрят, кому бы подпорченную рыбку сбагрить. Холодильников то почти нет.
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563732
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо...
Отдельное спасибо Rivkin Dmitry
Все работает посто отлично!
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563763
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Северу! Давно там не бывал, и уж, наверное, не буду! А жаль.. :(
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32563767
Фотография neal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИрчаУ нас уже тепло, но потеплело очень резко. 6 июля была метель и -5, а сейчас 28 вот на рынке и смотрят, кому бы подпорченную рыбку сбагрить. Холодильников то почти нет.

А какая у Вас разница во времени? :)))
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564084
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neal ИрчаУ нас уже тепло, но потеплело очень резко. 6 июля была метель и -5, а сейчас 28 вот на рынке и смотрят, кому бы подпорченную рыбку сбагрить. Холодильников то почти нет.

А какая у Вас разница во времени? :)))
Когда я там бывал - разница с Москвой была 2 часа (Израиль с Москвой впереди на 1 час), но судя по 6 июля с тех пор они значительно нас обогнали :)))
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564638
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryКогда я там бывал - разница с Москвой была 2 часа (Израиль с Москвой впереди на 1 час), но судя по 6 июля с тех пор они значительно нас обогнали :)))
Мы такие, к концу рабочего дня еще не то можем.
А вообще то я по делу.
Где-то туплю
Вот что у меня получилось
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("оплата", dbOpenDynaset)
SummaP =  10000 
With rs
Do While Not .EOF
.Edit
If SummaP >= !Dolg Then
!Opl = !Dolg
Else
  If SummaP < !Dolg Then
  !Opl = SummaP
  End If
End If
SummaP = SummaP - !Opl
If SummaP =  0  Then
Exit Do
End If
.Update
.MoveNext
Loop
If SummaP >  0  Then
MsgBox "лишних денег " & SummaP
End If
End With
End Sub
не срабатывает второе условие
SummaP < !Dolg ,Т.е. Когда сумма перестает быть больше или равна долгу,
молча не добавляет остаток.
Ставлю точку останова на это место
SummaP = SummaP - !Opl
Значения все правильные
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564645
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выход из цикла без сохранения рекордсета
If SummaP = 0 Then
.Update
Exit Do
End If
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564647
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а пример данных пару строк + тип полей в таблице + описание переменных Variant/Float ?
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564649
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Объект	КодД	Dolg	Data	                opl
 180 	 1027 	 992 , 47700 	 17 ,июн, 2004 	
 339 	 1027 	 989 , 90600 	 17 ,июн, 2004 	
 359 	 1027 	 978 , 08900 	 17 ,июн, 2004 	
 102 	 1027 	 97 , 58200 	 17 ,июн, 2004 	
 398 	 1027 	 9644 , 58500 	 17 ,июн, 2004 	 6942 
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564651
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это была временная таблица из которой рекордсет
после внесенных изменений
If SummaP = 0 Then
.Update
Exit Do
End If
Общая сумма задолженности в таблице 12702,639,
распределяю 10000
Временная таблица
поля долг и оплата числовые, Одинарное с плавающей точкой
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564655
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
If SummaP >= !Dolg Then
!Opl = !Dolg
Else
  If SummaP < !Dolg Then
  !Opl = SummaP
  End If
End If
зачем по одному условия(If SummaP >= !Dolg Then
) 2 раза If ?
Код: plaintext
1.
2.
3.
4.
If SummaP >= !Dolg Then
!Opl = !Dolg
Else
!Opl = SummaP
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564656
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вдогон в recordset нет Order BY
порядок следования записей не важен ?
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564662
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня получилось всего
10000,0539855957
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Dim db As DAO.Database
Dim SummaP As Variant
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("оплата", dbOpenDynaset)
SummaP =  10000 
With rs
Do While Not .EOF
.Edit
If SummaP >= !Dolg Then
!Opl = !Dolg
Else
!Opl = SummaP
End If
SummaP = SummaP - !Opl
If SummaP =  0  Then
Exit Do
End If
.Update
.MoveNext
Loop
If SummaP >  0  Then
MsgBox "лишних денег " & SummaP
End If
End With
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564665
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
последний Update не работает - чукотка права
...
Рейтинг: 0 / 0
Помогите реализовать алгоритм
    #32564668
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пересчитал - получилось
?dsum("OPL","оплата")
10000,0539855957


в последней записи opl урезалась для достижения нужной суммы
Ирча что не так сейчас
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите реализовать алгоритм
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]