Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Вниз
Help me pls Найти похожие ветки
← →
begg (2006-11-14 06:53) [0]Здравствуйте!
Я думаю мой вопрос покажется вам тривиальным.
Суть проблемы: есть список дат с суммами остатков:
Список "ДО"
16/10/2006 84839.88
19/10/2006 50489.51
20/10/2006 85947.16
23/10/2006 64422.83
24/10/2006 81672.14
26/10/2006 25049.58
27/10/2006 27391.66
03/11/2006 3868.98
10/11/2006 332.98
необходимо сформировать новый список
заполнив промежутки между датами(сумма остатка берется за вторую дату,те
в промежутке между 16/10/2006 и 17/10/2006 сумма остатка для 17/10/2006 и 17/10/2006
берется за 19/10/2006!
т.е. следующее:
Список "ПОСЛЕ"
16/10/2006 84839.88
17/10/2006 50489.51 +
18/10/2006 50489.51 +
19/10/2006 50489.51
20/10/2006 85947.16
21/10/2006 64422.83 +
22/10/2006 64422.83 +
23/10/2006 64422.83
24/10/2006 81672.14
25/10/2006 25049.58 +
26/10/2006 25049.58
27/10/2006 27391.66
28/11/2006 3868.98 +
29/11/2006 3868.98 +
... +
03/11/2006 3868.98
04/11/2006 332.98 +
05/11/2006 332.98 +
... +
10/11/2006 332.98
Я вот написал код но список местами не правильно формируется:(
В StringGrid1 - Список "ДО"
В StringGrid2 - помещается список "ПОСЛЕ" :)
var
Form1: TForm1;
g_SrcLineCount:Integer; //число строк в StringGrid1
...
//Функции для извлечения данных из StringGrid1
function getSrcDate(i:Integer):TDate;
begin
Result:=StrToDate(Form1.StringGrid1.Cells[1,i]);
end;
function getSrcCash(i:Integer):Double;
begin
Result:=StrToFloat(Form1.StringGrid1.Cells[2,i]);
end;
function getSrcDateStr(i:Integer):String;
begin
Result:=Form1.StringGrid1.Cells[1,i];
end;
function getSrcCashStr(i:Integer):String;
begin
Result:=Form1.StringGrid1.Cells[2,i];
end;
//процедура для занесения новой записи в StringGrid2
procedure putNewRecord(num:Integer; sdate:string; scash:string);
begin
Form1.StringGrid2.Cells[0,num]:=sdate);
Form1.StringGrid2.Cells[1,num]:=scash);
end;
// функция для вычисления количества дней между двумя датами
function getSubDate(dRight:TDate; dLeft:TDate):Integer;
begin
Result:=Trunc(dRight) - Trunc(dLeft);
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
NewDateList: TStrings;
NewCashList: TStrings;
tmpdate : TDate;
nRaznica : Integer;
i,j : Integer;
begin
{
Почему использую списки а не сразу пишу в стрингрид2?
...нужно для дальнейшей работы:)
}
NewDateList:= TStringList.Create;
NewCashList:= TStringList.Create;
FOR i:=1 TO g_SrcLineCount DO
BEGIN
if(i<g_SrcLineCount)then
begin
nRaznica := getSubDate(getSrcDate(i+1),getSrcDate(i));
tmpdate := getSrcDate(i);
if(nRaznica = 1)then
begin
NewDateList.Add(getSrcDateStr(i));
NewCashList.Add(getSrcCashStr(i));
end
else
if(nRaznica>1)then
begin
NewDateList.Add(getSrcDateStr(i));
NewCashList.Add(getSrcCashStr(i));
for j:=1 to nRaznica-1 do
begin
tmpdate:=IncDay(tmpdate);
NewDateList.Add(DateToStr(tmpdate));
NewCashList.Add(getSrcCashStr(i+1));
end;
end;
end;
if(i = g_SrcLineCount) then
begin
tmpdate:=IncDay(tmpdate);
NewDateList.Add(DateToStr(tmpdate));
NewCashList.Add(getSrcCashStr(i-1));
end;
END;
//заполнение StringGrid2
for j:=0 to (NewDateList.Count-1) do
putNewRecord(j+1,SrcDateList.Strings[j],SrsCashList.Strings[j]);
end;
Проблема в том что иногда добавляются записи
у которых сумма берется не за "правую" границу диапазона а за левую..??
([дд/мм/гг]...[дд/мм/гг]"правая"..ну Вы поняли меня)
Не могли бы вы посмотреть и сказать что тут не так...или предложить свое решение:)
Задача-то тривиальная ..но вот ошибку(логическую) пока поймать не могу...и времени в обрез...
СПАСИБО ЗАРАНЕЕ!!!
← →
KilkennyCat © (2006-11-14 08:09) [1]намного проще сделать наоборот, например: от 10/11/2006 до 16/10/2006
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c