Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Неправильная нумерация месяцев


Автор: _Nick_ 17.3.2007, 12:12
Вообщем есть вот такой код
Код

procedure TForm1.rasClick(Sender: TObject);
var number: integer;
    kol_parts:integer;
    Value:integer;
    mes:integer;
    ii: integer;
     i: integer;
    Valuee:Tstringfield;
    DDD:Tstringfield;
    Year, Month, Day, Hour, Min, Sec, MSec: Word;
    Present: TDateTime;
    ye:integer;

begin

  number:=StrToInt(DBEdit3.Text);  // число
  kol_parts:=StrToInt(DBEdit4.Text); // количество частей
  ClientDataSet1:=TClientDataSet.Create(Application);
  Valuee:=TStringField.Create(Application);
  DDD:=TStringField.Create(Application);
  Valuee.FieldName:='Колонка_1';
  DDD.FieldName:='Колонка_2';
  Valuee.Size:=10;
  DDD.Size:=15;
  Valuee.DataSet:=ClientDataSet1;
  DDD.DataSet:=ClientDataSet1;
  ClientDataSet1.CreateDataSet;
  ClientDataSet1.LogChanges:=false;
    Present:= Now;
    DecodeDate(Present, Year, Month, Day);

  value:=number div kol_parts;  // значение для записи
   mes:=(month);
   ye:=(Year);
  DBGrid2.Columns.Clear;
  for  ii:=1 to kol_parts do
  begin
    ClientDataSet1.Append;
    ClientDataSet1.FieldByName('Колонка_1').AsInteger:=value;
    ClientDataSet1.FieldByName('Колонка_2').AsString:=inttostr(mes)+'.'+inttostr(ye);
    mes:=(mes)+1;
    if mes>12 then
    ye:=(year)+1;
  end;

  DataSource2:=TDataSource.Create(Application);
  DataSource2.DataSet:=ClientDataSet1;
  DBGrid2.DataSource:=DataSource2;
  end;

В одной колонке он выводит разделенное на равные части число, во второй дату (мес/год), после достижения кол-ва месяцев 12 год увеличиваеться на 1. Подскажите как сделать что б по достижению кол-ва месяцев 12 их нумераци пошла с единицы, а не как сейчас месяцы просто нумеруються дальше т.е. дошло до 12, год увеличился а дальше месяц 13, 14.... и.т.д.

З.Ы. Обращался в раздел дельфи, не помогли  

Автор: Rodman 17.3.2007, 13:10
а так ???


mes:=month mod 12;

Автор: _Nick_ 17.3.2007, 14:10
Цитата(Rodman @ 17.3.2007,  13:10)
а так ???


mes:=month mod 12;

И куда это вставить ???
Я попробовал вот в этот кусок

Код

...
 if mes>12 then
     mes:=month mod 12;
    ye:=(year)+1;
...

непомогло

Автор: ama_kid 17.3.2007, 14:29
Хм... Не вникал в код, просто отвечаю на вопрос исходя из предложенного кода...
Код

 for  ii:=1 to kol_parts do
  begin
    ClientDataSet1.Append;
    ClientDataSet1.FieldByName('Колонка_1').AsInteger:=value;
    ClientDataSet1.FieldByName('Колонка_2').AsString:=inttostr(mes)+'.'+inttostr(ye);
    mes:=(mes)+1;
    if mes>12 then
     begin
      ye:=ye+1;       // Обрати внимание на изменение здесь!
      mes:=1;
     end;
  end;

Автор: _Nick_ 17.3.2007, 15:17
Во, спасиб, только еще одна заминочка осталась получаеться вот как: кол-во месяце дошло до 12, год увеличился, счет месяцев пошел с 1, снова дошло до 12, а год уже не увеличился остался прежний, подскажешь как это поправить smile

 

Автор: ama_kid 17.3.2007, 15:36
ты мой комментарий в предыдущем посте внимательно прочитал? Изменение заметил в строке ye:=ye+1 ?
У тебя было ye:=year+1;... видимо, ты не поправил это дело... Если поправил - приведи еще раз код, чтоб можно было целиком охватить...

Автор: _Nick_ 17.3.2007, 16:00
Звиняй, действительно не поправил ye:=year+1 на ye:=ye+1 smile , счас усе ОК, еще раз спасиб за помощь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)