vga написал(а):
Если логика программы позволяет, лучше не удалять записи, а внести дополнительное поле flag(1) и помечать 'X' его, если запись уже обработана. В главном цикле добавьте условие LOOP AT ... WHERE flag IS INITIAL.
Цитата:
в таблице выбирается 405309 записей....
Да тут логика очень странная:
1.Похоже, таблица TCH_F ДОЛЖНА БЫТЬ сортирована перед циклом по плательщику, номеру фактуры и SUB_NUM (что кстати означает поле SUB_NUM?).
При этом удаление идет по номеру фактуры и SUB_NUM, из которых составлено NOM_LONG
Зачем было вводить это поле, если AT NEW могло прекрасно работать по полю SUB_NOM в случае правильной сортировки? Заодно от "тормозного" цикла избавитесь
2.Вот это:
Code:
IF WA_SLD-NOM_CH_F = NOM_CHF AND WA_SLD-SUB_NOM = SUB_NOM.
вообще супер!
Разве это условие когда-нибудь не будет выполняться при присвоении в AT NEW полей NOM_CHF и SUB_NOM(опять же при нормальной сортировке)?
3.Где здесь год анализируется?
Code:
IF WA_SLD-MONAT = MONAT.
Я конечно понимаю, что обороты по платежам по фактуре могут за месяц формироваться, но оплачиваться счет-фактура теоретически может не один год. Поэтому здесь наверно уместно условие
Code:
IF WA_SLD-DATE_F GE DATE_B.
4.Может сделать таблицу ITKUN сортированной и вместо INSERT использовать COLLECT?
И напоследок: а сколько по времени отрабатывает данный шедевр?
