//=========================================================================
// Процедура печати в формате Excel прямая запись в xls-файл
//=========================================================================
// Печать шапки отчета
procedure PrintHeader(var aStr : LongInt);
{
xlSetCellStringValue('Исполнение договоров (финансовая часть)', 1, 1, 1, 1);
xlSetCellStringValue('Договор', 2, 1, 2, 1);
xlSetCellStringValue('Соглашение', 2, 3, 2, 3);
xlSetCellStringValue('Относится к', 2, 5, 2, 5);
xlSetCellStringValue('Контрагент', 2, 7, 2, 7);
xlSetCellStringValue('Срок действия', 2, 8, 2,
;
xlSetCellStringValue('Вид', 2, 10, 2, 10);
xlSetCellStringValue('Назначение', 2, 11, 2, 11);
xlSetCellStringValue('Тип по', 2, 12, 2, 12);
xlSetCellStringValue('вал.', 3, 12, 3, 12);
xlSetCellStringValue('Вал.', 2, 13, 2, 13);
xlSetCellStringValue('Статус', 2, 14, 2, 14);
xlSetCellStringValue('Наши платежи', 2, 15, 2, 15);
xlSetCellStringValue('Платежи контрагента', 2, 21, 2, 21);
xlSetCellStringValue('Номер', 3, 1, 3, 1);
xlSetCellStringValue('Дата', 3, 2, 3, 2);
xlSetCellStringValue('Номер', 3, 3, 3, 3);
xlSetCellStringValue('Дата', 3, 4, 3, 4);
xlSetCellStringValue('Номер', 3, 5, 3, 5);
xlSetCellStringValue('Дата', 3, 6, 3, 6);
xlSetCellStringValue('С', 3, 8, 3,
;
xlSetCellStringValue('По', 3, 9, 3, 9);
xlSetCellStringValue('План', 3, 15, 3, 15);
xlSetCellStringValue('Факт', 3, 17, 3, 17);
xlSetCellStringValue('Откл', 3, 19, 3, 19);
xlSetCellStringValue('План', 3, 21, 3, 21);
xlSetCellStringValue('Факт', 3, 23, 3, 23);
xlSetCellStringValue('Откл', 3, 25, 3, 25);
xlSetCellStringValue('В НДЕ', 4, 15, 4, 15);
xlSetCellStringValue('В валюте', 4, 16, 4, 16);
xlSetCellStringValue('В НДЕ', 4, 17, 4, 17);
xlSetCellStringValue('В валюте', 4, 18, 4, 18);
xlSetCellStringValue('В НДЕ', 4, 19, 4, 19);
xlSetCellStringValue('В валюте', 4, 20, 4, 20);
xlSetCellStringValue('В НДЕ', 4, 21, 4, 21);
xlSetCellStringValue('В валюте', 4, 22, 4, 22);
xlSetCellStringValue('В НДЕ', 4, 23, 4, 23);
xlSetCellStringValue('В валюте', 4, 24, 4, 24);
xlSetCellStringValue('В НДЕ', 4, 25, 4, 25);
xlSetCellStringValue('В валюте', 4, 26, 4, 26);
aStr := 4;
}
#include NextTree.vpp // функции для отчетов
procedure PrintInExcelXls(aRepType : Byte);
var
StrCount, ColCount, HeaderStrCount : LongInt;
XlRes : Boolean;
aFileName : String;
i, j : Integer;
{
StartNewVisual( vtNumericVisual, vfTimer+vfBreak+vfConfirm, ''#3'Подготовка отчета к печати', 1);
XlRes := True;
aFileName := GetStringParameter('Files','OutputFilesDirectory',0) + 'ispfin.xls';
DeleteFile(aFileName);
XlRes := xlCreateExcel((aFileName), True);
if (XlRes)
XlRes := xlIsExcelValid;
if (not XlRes)
{
StopVisual('',0);
Exit;
}
PrintHeader(HeaderStrCount); // Печать шапки отчета
StrCount := HeaderStrCount + 1;
TreePushPos(MainTree);
// Ctrl-P - печать всего отчета
if (aRepType = 1)
TreeGetFirstEx(MainTree);
// Alt-P - печать c текущего уровня
else
if (IsValid(#Dogovor))
while (Dogovor.cDogovor <> Comp(0)) do
TreeGetPrevEx(MainTree);
FirstLevel := TreeLevel(MainTree);
do
{
if (not NextVisual)
{
StopVisual('',0);
Message('Формирование отчета прервано пользователем.',OKButton)
xlKillExcel;
TreePopPos(MainTree);
RescanPanel(#TempDescr);
Exit;
}
if (not IsValid(#Dogovor))
{
if (not fTreeNext(aRepType)) Break;
Continue;
}
// Договор
if (Dogovor.cDogovor = Comp(0))
ColCount := 1
// Соглашение
else
ColCount := 3;
xlSetCellStringValue('N ' + Dogovor.NoDoc, StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
if (LongInt(Dogovor.DDoc) <> 0)
xlSetCellStringValue(DateToStr(Dogovor.DDoc,'MM/DD/YYYY'), StrCount, ColCount, StrCount, ColCount);
// Вышележащий документ
if (Dogovor.cDogovor <> Comp(0))
{
ColCount := 5;
xlSetCellStringValue('N ' + DogovorUp.NoDoc, StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
if (LongInt(DogovorUp.DDoc) <> 0)
xlSetCellStringValue(DateToStr(DogovorUp.DDoc,'MM/DD/YYYY'), StrCount, ColCount, StrCount, ColCount);
}
// Реквизиты
ColCount := 7;
xlSetCellStringValue(KatOrg1Name, StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
if (LongInt(Dogovor.DBeg) <> 0)
xlSetCellStringValue(DateToStr(Dogovor.DBeg,'MM/DD/YYYY'), StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
if (LongInt(Dogovor.DEnd) <> 0)
xlSetCellStringValue(DateToStr(Dogovor.DEnd,'MM/DD/YYYY'), StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellStringValue(KatVidDName, StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellStringValue(KatNaznaName, StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellStringValue(fTip, StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellStringValue(fValOtch, StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellStringValue(DogovorStatus, StrCount, ColCount, StrCount, ColCount);
// Суммы
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[7], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[8], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[9], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[10], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[11], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[12], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[1], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[2], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[3], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[4], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[5], StrCount, ColCount, StrCount, ColCount);
ColCount := ColCount + 1;
xlSetCellNumberValue(TempDescr.Sum[6], StrCount, ColCount, StrCount, ColCount);
StrCount := StrCount + 1;
if (not fTreeNext(aRepType)) Break;
}
while True;
StopVisual('',0);
// Настройка форматов ячеек
StartNewVisual( vtRotateVisual, vfTimer+vfConfirm, ''#3'Настройка формата Excel-файла', 1);
xlSetNumberFormat('ДД/ММ/ГГГГ', HeaderStrCount + 1, 2, StrCount, 2);
xlSetNumberFormat('ДД/ММ/ГГГГ', HeaderStrCount + 1, 4, StrCount, 4);
xlSetNumberFormat('ДД/ММ/ГГГГ', HeaderStrCount + 1, 6, StrCount, 6);
xlSetNumberFormat('ДД/ММ/ГГГГ', HeaderStrCount + 1, 8, StrCount, 9);
xlSetNumberFormat('### ### ### ### ##0,00', HeaderStrCount + 1, 15, StrCount, 26);
xlSetColumnWidth(17, 1, 1, StrCount, 1); // Номер договора
xlSetColumnWidth(17, 1, 3, StrCount, 3); // Номер соглашения
xlSetColumnWidth(17, 1, 5, StrCount, 5); // Номер вышележащего
xlSetColumnWidth(20, 1, 7, StrCount, 7); // Контрагент
xlSetColumnWidth(14, 1, 10, StrCount, 10); // Вид
xlSetColumnWidth(14, 1, 11, StrCount, 11); // Назначение
xlSetColumnWidth(5, 1, 13, StrCount, 13); // Валюта
xlSetColumnWidth(18, 1, 15, StrCount, 26); // Суммы
xlSetFontStyle(xlBold, 1, 1, HeaderStrCount, 26);
xlSetFontSize(16, 1, 1, 1, 26);
xlSetFontSize(12, 2, 1, HeaderStrCount, 26);
StrCount := StrCount - 1;
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB or xlInsideV or xlInsideH, xlThin, 0, 0,
HeaderStrCount + 1,1,StrCount,26);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 1, 1, 1,26);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, 1, 2, 2);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, 3, 2, 4);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, 5, 2, 6);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, 7, 4, 7);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, 8, 2, 9);
for (i := 10; i <= 14; i := i + 1)
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, i, 4, i);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, 15, 2, 20);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 2, 21, 2, 26);
for (i := 1; i <= 6; i := i + 1)
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, i, 4, i);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 8, 4,
;
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 9, 4, 9);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 15, 3, 16);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 17, 3, 18);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 19, 3, 20);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 21, 3, 22);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 23, 3, 24);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 3, 25, 3, 26);
for (i := 15; i <= 26; i := i + 1)
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, 4, i, 4, i);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1, 1,StrCount, 2);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1, 3,StrCount, 4);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1, 5,StrCount, 6);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1, 7,StrCount,14);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1,15,StrCount,17);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1,15,StrCount,16);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1,17,StrCount,18);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1,19,StrCount,20);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1,21,StrCount,22);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1,23,StrCount,24);
xlFrameCells(xlBorderL or xlBorderR or xlBorderT or xlBorderB, xlMedium, 0, 0, HeaderStrCount + 1,25,StrCount,26);
StopVisual('',0);
xlKillExcel;
TreePopPos(MainTree);
RescanPanel(#TempDescr);
}
//=========================================================================
// Процедура печати в текстовом формате
//=========================================================================
// Печать сумм как для ветки, так и для договора и соглашения
procedure PrintSumms;
{
fIspFin.Write(TempDescr.Sum[7]);
fIspFin.Write(TempDescr.Sum[8]);
fIspFin.Write(TempDescr.Sum[9]);
fIspFin.Write(TempDescr.Sum[10]);
fIspFin.Write(TempDescr.Sum[11]);
fIspFin.Write(TempDescr.Sum[12]);
fIspFin.Write(TempDescr.Sum[1]);
fIspFin.Write(TempDescr.Sum[2]);
fIspFin.Write(TempDescr.Sum[3]);
fIspFin.Write(TempDescr.Sum[4]);
fIspFin.Write(TempDescr.Sum[5]);
fIspFin.Write(TempDescr.Sum[6]);
fIspFin.Write(TempDescr.Sum[13]);
fIspFin.Write(TempDescr.Sum[14]);
}
procedure PrintInText(aRepType : Byte);
var
sFilter, sVal, sVal1, Str : String;
{
StartNewVisual( vtNumericVisual, vfTimer+vfBreak+vfConfirm, ''#3'Подготовка отчета к печати', 1);
TreePushPos(MainTree);
// Печать всего отчета
if (aRepType = 1)
TreeGetFirstEx(MainTree);
// Печать c текущего уровня
else
if (IsValid(#Dogovor))
while (Dogovor.cDogovor <> Comp(0)) do
TreeGetPrevEx(MainTree);
FirstLevel := TreeLevel(MainTree);
// Заголовок
if ((UserDeskRep.ResWord[3] and 1) = 1)
{
Str := '';
if (LongInt(UserDeskRep.ResDate[1]) <> 0)
{
fIspFin.Write(UserDeskRep.ResDate[1]);
Str := 'с ' + String(UserDeskRep.ResDate[1]) + ' ';
}
else fIspFin.Write(' ');
if (LongInt(UserDeskRep.ResDate[2]) <> 0)
{
fIspFin.Write(UserDeskRep.ResDate[2]);
Str := Str + 'по ' + String(UserDeskRep.ResDate[2]);
}
else fIspFin.Write(' ');
if (Str <> '')
{
fIspFin.PutEventByID(feTrue, fcExistPeriodFin);
fIspFin.Write(Str);
}
}
else
fIspFin.SkipFormat(2);
sFilter := '';
if ((UserDeskRep.ResWord[3] and 2) > 1) sFilter := sFilter + '<Назначение>';
if ((UserDeskRep.ResWord[3] and 4) > 1) sFilter := sFilter + '<Контрагент>';
if ((UserDeskRep.ResWord[3] and
> 1) sFilter := sFilter + '<Вид договора>';
if ((UserDeskRep.ResWord[3] and 16) > 1) sFilter := sFilter + '<Только с отклонениями>';
if (sFilter <> '')
{
fIspFin.PutEventByID(feTrue, fcExistFilterFin);
fIspFin.Write(sFilter);
}
sVal1 := if (IsValid(#KlVal3), KlVal3.SimvolV + ' ( ' + KlVal3.Dollar + ' )',
s_SimvRub + ' ( ' + sGetTune('NDE.NameRubl') + ' )' );
if (UserDeskRep.ResWord[1] = 0)
sVal := 'Валюта документа'
else
sVal := sVal1;
fIspFin.Write(sVal);
fIspFin.Write(sVal1);
do
{
if (not NextVisual)
{
StopVisual('',0);
Message('Формирование отчета прервано пользователем.',OKButton)
TreePopPos(MainTree);
RescanPanel(#TempDescr);
Exit;
}
// Ветка
if (not IsValid(#Dogovor))
{
fIspFin.PutEventById(feDoLoop,fcGruppaFin);
fIspFin.Write(PrintSpace(TreeLevel(MainTree)) + TempDescr.Name);
PrintSumms; // Печать сумм
fIspFin.PutEventById(feBreak,fcGruppaFin);
if (not fTreeNext(aRepType)) Break;
Continue;
}
fIspFin.PutEventById(feDoLoop,fcMainRecFin);
// Договор
if (Dogovor.cDogovor = Comp(0))
{
fIspFin.Write(Dogovor.NRec);
fIspFin.Write(Dogovor.NoDoc);
if (LongInt(Dogovor.DDoc) <> 0) fIspFin.Write(Dogovor.DDoc)
else fIspFin.Write(' ');
fIspFin.SkipFormat(3);
}
// Соглашение
else
{
fIspFin.SkipFormat(3);
fIspFin.Write(Dogovor.NRec);
fIspFin.Write(Dogovor.NoDoc);
if (LongInt(Dogovor.DDoc) <> 0) fIspFin.Write(Dogovor.DDoc)
else fIspFin.Write(' ');
}
// Вышележащий документ
if (Dogovor.cDogovor <> Comp(0))
{
fIspFin.Write(DogovorUp.NRec);
fIspFin.Write(DogovorUp.NoDoc);
if (LongInt(DogovorUp.DDoc) <> 0) fIspFin.Write(DogovorUp.DDoc)
else fIspFin.Write(' ');
}
else
fIspFin.SkipFormat(3);
// Реквизиты
fIspFin.Write(KatOrg1Name);
if (LongInt(Dogovor.DBeg) <> 0) fIspFin.Write(Dogovor.DBeg)
else fIspFin.Write(' ');
if (LongInt(Dogovor.DEnd) <> 0) fIspFin.Write(Dogovor.DEnd)
else fIspFin.Write(' ');
fIspFin.Write(KatVidDName);
fIspFin.Write(KatNaznaName);
fIspFin.Write(fTip);
fIspFin.Write(fValOtch);
fIspFin.Write(DogovorStatus);
PrintSumms; // Печать сумм
// Наши платежи
_loop Rasx
{
fIspFin.PutEventById(feDoLoop, fcOtgr1Fin);
fIspFin.Write(Substr(Rasx.NoDocRt,1,10));
if (LongInt(Rasx.dDoc) <> 0) fIspFin.Write(Rasx.dDoc)
else fIspFin.Write(' ');
fIspFin.Write(fValRasx);
fIspFin.Write(Rasx.NoDocPr);
fIspFin.Write(Rasx.Kol);
fIspFin.Write(Rasx.Summa);
fIspFin.Write(Rasx.cDouble1);
fIspFin.Write(Rasx.cDouble2);
fIspFin.Write(Rasx.cDouble1 - Rasx.Kol);
fIspFin.Write(Rasx.cDouble2 - Rasx.Summa);
}
// Платежи контрагента
_loop Prix
{
fIspFin.PutEventById(feDoLoop, fcOtgr2Fin);
fIspFin.Write(Substr(Prix.NoDocRt,1,10));
if (LongInt(Prix.dDoc) <> 0) fIspFin.Write(Prix.dDoc)
else fIspFin.Write(' ');
fIspFin.Write(fValPrix);
fIspFin.Write(Prix.NoDocPr);
fIspFin.Write(Prix.Kol);
fIspFin.Write(Prix.Summa);
fIspFin.Write(Prix.cDouble1);
fIspFin.Write(Prix.cDouble2);
fIspFin.Write(Prix.cDouble1 - Prix.Kol);
fIspFin.Write(Prix.cDouble2 - Prix.Summa);
}
fIspFin.PutEventById(feBreak,fcMainRecFin);
if (not fTreeNext(aRepType)) Break;
}
while True;
StopVisual('',0);
if (not fIspFin.Error)
fIspFin.ShowFile('Исполнение договоров (финансовая часть)')
else
{
fIspFin.AbortForm;
Message(''#3'В форме возникли ошибки.'#13#3+'Просмотр невозможен');
}
TreePopPos(MainTree);
RescanPanel(#TempDescr);
}