adg208
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Примерно так //------------------------------------------------------------------------------ //Процедура формирует в Excel основные строки СИ procedure SiExcel(index: Integer; j: Integer; Sheet: Variant); begin Sheet.Rows[26].Copy(Sheet.Rows[index+1]); //Копирует 24 строку Excel в 25 Sheet.Cells[index,1]:=j; //N п/п Sheet.Cells[index,2]:=DataModule2.TableSi.Fields.Fields[5].AsString; //Инвентарный номер Sheet.Cells[index,3]:=DataModule2.TableSi.Fields.Fields[2].AsString; //Наименование СИ Sheet.Cells[index,4]:=DataModule2.TableSi.Fields.Fields[3].AsString; //Тип СИ Sheet.Cells[index,5]:=DataModule2.TableSi.Fields.Fields[4].AsString; //Номер СИ Sheet.Cells[index,6]:=DataModule2.TableSi.Fields.Fields[16].AsString; //Место расположения // Sheet.Cells[index,7]:=DataModule2.TableSi.Fields.Fields[11].AsString+' '+ // DataModule2.TableSi.Fields.Fields[13].AsString; //шкала Sheet.Cells[index,7]:=DataModule2.TableSi.Fields.Fields[8].AsString+' '+ DataModule2.TableSi.Fields.Fields[10].AsString; //Предел измерения Sheet.Cells[index,8]:=DataModule2.TableSi.Fields.Fields[19].AsFloat; //Класс точности Sheet.Cells[index,9]:=DataModule2.TableSi.Fields.Fields[7].AsString; //Дата последнего клеймения Sheet.Cells[index,10]:=DataModule2.TableSi.Fields.Fields[20].AsInteger; //Периодичность поверки, калибровки (месяцев) end; procedure TFormGrafPov.Button1Click(Sender: TObject); var XLApp, Sheet: Variant; index,ind, i,j: Integer; DMY,KS1: TDate; KolMonth: Integer; Y1: Word; //месяц, Y1=(год+период поверки), Y2=(год+(период поверки умноженный на два)) str,str1:String; begin XLApp:=CreateOleObject('Excel.Application'); XLApp.WorkBooks.Open('d:\pr\metr\db' + '\График поверки и калибровки.xls'); Sheet:=XLApp.WorkBooks[1].WorkSheets['График']; XLApp.Visible:=true; DataModule2.TableSi.IndexFieldNames:='KID'; //сортирует таблицу по полю KID index:=26; //в EXCEL начинается с 26 строки j:=1; ind:=24; str1:=''; DataModule2.TableSi.First; for i:=0 to DataModule2.TableSi.RecordCount-1 do //Начало цикла begin //Если поле "установка/цех" есть в таблице, то выводим только строки с этой установкой/цехом if DataModule2.TableSi.Fields.Fields[18].AsString=ComboBox.Text then begin //берем из таблицы ADOTableSi столбец дата последнего клеймления-"ADOTableSiDateCleim" //преобразуем его в дату и присваиваем переменной DMY DMY:=DataModule2.TableSi.Fields.Fields[7].AsDateTime; //берем из таблицы ADOTableSi столбец период поверки(калибровки)-"ADOTableSiPeriodPK" //преобразуем его в число и присваиваем переменной KolMonth KolMonth:=StrToInt(DataModule2.TableSi.Fields.Fields[20].AsString); //Получаем дату вычисленную из месяца последнего клеймления плюс количество месяцев периода поверки KS1:=SummMonth(KolMonth,DMY); //получаем год из даты KS1 Y1:=YearOf(KS1); if Label3.Caption='' then Label3.Caption:='0'; //Если дата последнего клеймления+ период калибровки не равны выбранным годам, //то просто выводи пустое поле СИ if (Y1 <> (YearOf(DateTimePicker.Date))) and (Y1<>(StrToInt(Label3.Caption))) then begin SiExcel(index,j,Sheet); // Inc(index); Inc(j); DataModule2.TableSi.Next; end; end; end; end; |