Код: Выделить всё
begin //LibreOffice
//Друк групуючої
odt := TOdt.Create;
odt.LoadFromFile(Encoding(GetAppConfigDir(False) + 'monthreport.odt'));
//Обнулення масиву загальної суми
for j := 1 to 15 do
suma[j] := 0;
//Постачальник
sqlqOrg.Close;
sqlqOrg.SQL.Clear;
sqlqOrg.SQL.Add(
'SELECT fullname, posada, fam, posadagb, famgb FROM org WHERE id = 1');
sqlqOrg.Open;
//шапка
//назва організації
odt.FindAndReplace('#org#', sqlqOrg.FieldByName('fullname').AsString);
//дата
y := frmMonthReport.speRik.Value;
m := frmMonthReport.CombMis.ItemIndex + 1;
if m > 9 then
mm := IntToStr(m)
else
mm := '0' + IntToStr(m);
odt.FindAndReplace('#month#', UkrMonthStr[m]);
odt.FindAndReplace('#year#', IntToStr(y));
//Підписи
odt.FindAndReplace('#pos#', sqlqOrg.FieldByName('posada').AsString);
odt.FindAndReplace('#fam#', sqlqOrg.FieldByName('fam').AsString);
odt.FindAndReplace('#posgb#', sqlqOrg.FieldByName('posadagb').AsString);
odt.FindAndReplace('#famgb#', sqlqOrg.FieldByName('famgb').AsString);
//Таблиця
tbl := odt.GetTable('tblMonthReport');
tbl.SetTextStyle('group', 'Times New Roman', 8, [ftBold], tpLeft);
tbl.SetTextStyle('groupb', 'Times New Roman', 8, [ftBold], tpRight);
tbl.SetTextStyle('client', 'Times New Roman', 8, [ftBold, ftItalic], tpLeft);
tbl.SetTextStyle('clientb', 'Times New Roman', 8, [ftBold, ftItalic], tpRight);
i := 2; //Номер рядка таблиці (починаеться з 0)
sqlqClientGroup.Close;
sqlqClientGroup.SQL.Clear;
sqlqClientGroup.SQL.Add('SELECT * FROM clientgroup');
sqlqClientGroup.Open;
sqlqClientGroup.Last;
if sqlqClientGroup.RecordCount = 0 then
begin
ShowMessage('Не знайдено категорій замовників.'
+ #13 + 'Друк неможливий.');
exit;
end;
//Категорія
sqlqClientGroup.First;
for g := 1 to sqlqClientGroup.RecordCount do
begin
//Кліэнти
sqlqClients.Close;
sqlqClients.SQL.Clear;
sqlqClients.SQL.Add('SELECT id, name FROM clients WHERE clientgroupid='
+ sqlqClientGroup.FieldByName('id').AsString);
sqlqClients.Open;
sqlqClients.Last;
if sqlqClients.RecordCount <> 0 then
begin
tbl.MultiplyRow(i, 1);// Додаєм рядок на категорію
//Змінити колір
//... не реалізовано
with tbl do
begin //Заповнення рядка категорії
FindAndReplace(i, '#n#', '');
FindAndReplace(i, '#vydroboty#', sqlqClientGroup.FieldByName(
'name').AsString);
for j := 1 to 15 do
begin
FindAndReplace(i, nazva[j], '');
sumg[j] := 0;
//обнулення суми категорії замовника
end;{for l}
tbl.ApplyTextStyle(1, i, 'group');
end;
Inc(i);
sqlqClients.First;
for c := 1 to sqlqClients.RecordCount do
begin
//Роботи
sqlqWork.Close;
sqlqWork.SQL.Clear;
sqlqWork.SQL.Add('SELECT * FROM work WHERE (poperopl=0) AND (misgrup = '
+ IntToStr(y) + '.' + mm + ') AND (clientid = ' +
sqlqClients.FieldByName('id').AsString + ')');
sqlqWork.Open;
sqlqWork.Last;
if sqlqWork.RecordCount <> 0 then
begin
tbl.MultiplyRow(i, 1);// Додаєм рядок замовника
tbl.FindAndReplace(i, '#n#', '');
tbl.FindAndReplace(i, '#vydroboty#',
sqlqClients.FieldByName('name').AsString);
for j := 1 to 15 do
begin
tbl.FindAndReplace(i, nazva[j], '');
sump[j] := 0; //обнулення суми замовника
end;{for j}
tbl.ApplyTextStyle(1, i, 'client');
Inc(i);
sqlqWork.First;
for w := 1 to sqlqWork.RecordCount do
begin
tbl.MultiplyRow(i, 1);// Додаєм рядок роботи
tbl.FindAndReplace(i, '#n#', IntToStr(w) + '.');
//Назва роботи
sqlqTypeWork.Close;
sqlqTypeWork.SQL.Clear;
sqlqTypeWork.SQL.Add('SELECT name FROM typework WHERE id='
+ sqlqWork.FieldByName('typeworkid').AsString);
sqlqTypeWork.Open;
tbl.FindAndReplace(i, '#vydroboty#',
sqlqTypeWork.FieldByName('name').AsString);
//Мат. і МШП
tbl.FindAndReplace(i, nazva[1],
FormatFloat('0.00', sqlqWork.FieldByName('mat').AsFloat));
sump[1] := sump[1] + sqlqWork.FieldByName('mat').AsFloat;
//ПММ
tbl.FindAndReplace(i, nazva[2],
FormatFloat('0.00', sqlqWork.FieldByName('pmm').AsFloat));
sump[2] := sump[2] + sqlqWork.FieldByName('pmm').AsFloat;
//Ком.посл.
tbl.FindAndReplace(i, nazva[3],
FormatFloat('0.00', sqlqWork.FieldByName('kp').AsFloat));
sump[3] := sump[3] + sqlqWork.FieldByName('kp').AsFloat;
tbl.FindAndReplace(i, nazva[4],
FormatFloat('0.00', sqlqWork.FieldByName('matvytr').AsFloat));
sump[4] := sump[4] + sqlqWork.FieldByName('matvytr').AsFloat;
//ЗП виконавці
tbl.FindAndReplace(i, nazva[5],
FormatFloat('0.00', sqlqWork.FieldByName('zp').AsFloat));
sump[5] := sump[5] + sqlqWork.FieldByName('zp').AsFloat;
//ЗП водії
tbl.FindAndReplace(i, nazva[6],
FormatFloat('0.00', sqlqWork.FieldByName('vodzp').AsFloat));
sump[6] := sump[6] + sqlqWork.FieldByName('vodzp').AsFloat;
//ЗП разом
tbl.FindAndReplace(i, nazva[7],
FormatFloat('0.00', sqlqWork.FieldByName(
'zp').AsFloat + sqlqWork.FieldByName('vodzp').AsFloat));
sump[7] :=
sump[7] + sqlqWork.FieldByName('zp').AsFloat +
sqlqWork.FieldByName('vodzp').AsFloat;
//ПФ виконавці
tbl.FindAndReplace(i, nazva[8],
FormatFloat('0.00', sqlqWork.FieldByName('pf').AsFloat));
sump[8] := sump[8] + sqlqWork.FieldByName('pf').AsFloat;
//ПФ водії
tbl.FindAndReplace(i, nazva[9],
FormatFloat('0.00', sqlqWork.FieldByName('vodpf').AsFloat));
sump[9] := sump[9] + sqlqWork.FieldByName('vodpf').AsFloat;
//ПФ разом
tbl.FindAndReplace(i, nazva[10],
FormatFloat('0.00', sqlqWork.FieldByName(
'pf').AsFloat + sqlqWork.FieldByName('vodpf').AsFloat));
sump[10] :=
sump[10] + sqlqWork.FieldByName('pf').AsFloat +
sqlqWork.FieldByName('vodpf').AsFloat;
//Амортизація
tbl.FindAndReplace(i, nazva[11],
FormatFloat('0.00', sqlqWork.FieldByName('amort').AsFloat));
sump[11] := sump[11] + sqlqWork.FieldByName('amort').AsFloat;
//Непрямі витрати
tbl.FindAndReplace(i, nazva[12],
FormatFloat('0.00', sqlqWork.FieldByName('nv').AsFloat));
sump[12] := sump[12] + sqlqWork.FieldByName('nv').AsFloat;
//Всього
tbl.FindAndReplace(i, nazva[13],
FormatFloat('0.00', sqlqWork.FieldByName('vsogo').AsFloat));
sump[13] := sump[13] + sqlqWork.FieldByName('vsogo').AsFloat;
//ПДВ
tbl.FindAndReplace(i, nazva[14],
FormatFloat('0.00', sqlqWork.FieldByName('pdv').AsFloat));
sump[14] := sump[14] + sqlqWork.FieldByName('pdv').AsFloat;
//Сума
tbl.FindAndReplace(i, nazva[15],
FormatFloat('0.00', sqlqWork.FieldByName('cina').AsFloat));
sump[15] := sump[15] + sqlqWork.FieldByName('cina').AsFloat;
Inc(i);
sqlqWork.Next;
end;{for w}
//Підсумок по роботах
tbl.MultiplyRow(i, 1);// Додаєм рядок всього
tbl.FindAndReplace(i, '#n#', '');
tbl.FindAndReplace(i, '#vydroboty#', 'Всього по ' +
sqlqClients.FieldByName('name').AsString);
tbl.ApplyTextStyle(1, i, 'client');
for j := 1 to 15 do
begin
tbl.FindAndReplace(i, nazva[j], FormatFloat('0.00', sump[j]));
tbl.ApplyTextStyle(j + 1, i, 'clientb');
sumg[j] := sumg[j] + sump[j];
end;{for j}
Inc(i);
end;{if sqlqWork.RecordCount}
sqlqClients.Next;
end;{for c}
//Підсумок по замовнику
tbl.MultiplyRow(i, 1);// Додаєм рядок замовника
tbl.FindAndReplace(i, '#n#', '');
tbl.FindAndReplace(i, '#vydroboty#', 'Всього по ' +
sqlqClientGroup.FieldByName('name').AsString);
tbl.ApplyTextStyle(1, i, 'group');
for j := 1 to 15 do
begin
tbl.FindAndReplace(i, nazva[j], FormatFloat('0.00', sumg[j]));
tbl.ApplyTextStyle(j + 1, i, 'groupb');
suma[j] := suma[j] + sumg[j];
end;{for j}
Inc(i);
end;{if sqlqClients.RecordCount<>0}
sqlqClientGroup.Next;
end;{for g}
ShowMessage(IntToStr(i));
//Підсумок по замовнику
tbl.FindAndReplace(i, '#n#', '');
tbl.FindAndReplace(i, '#vydroboty#', 'Всього за ' +
IntToStr(y) + '.' + mm);
tbl.ApplyTextStyle(1, i, 'group');
for j := 1 to 15 do
begin
tbl.FindAndReplace(i, nazva[j], FormatFloat('0.00', suma[j]));
tbl.ApplyTextStyle(j + 1, i, 'groupb');
end;{for j}
//Показ сформованого документа
odt.ShowDocument(Encoding('monthreport.odt'));
end;//LibreOffice