20.11.2013, 14:55 | #1 |
Участник
|
Вообщем, нужно выводить тотал, не могу понять почему, но у меня не выходит вывести правильный...
код. Код: IF HideNull THEN BEGIN TempColumnDimOption.RESET; IF TempColumnDimOption.FINDSET THEN REPEAT IF ColumnDimOption=ColumnDimOption::Period THEN BEGIN Date1:=TempColumnDimOption."Period Start"; Date2:=TempColumnDimOption."Period End"; END; CASE ColumnDimOption OF ColumnDimOption::Element: element1:=TempColumnDimOption.Code; ColumnDimOption::"Element Group": elementgroup1:=TempColumnDimOption.Code; ColumnDimOption::Employee: emp1:=TempColumnDimOption.Code; ColumnDimOption::"Org. Unit": organizatunit1:=TempColumnDimOption.Code; END; SumAmount1:=CalcPayroll1(COMPANYNAME,Date1,Date2,element1,emp1,organizatunit1,elementgroup1); TotalSum+=SumAmount1; UNTIL TempColumnDimOption.NEXT=0; END; IF ((TotalSum<>0) AND HideNull) OR (NOT HideNull) THEN BEGIN xlWorkSheet.Cells.Item(i,2,FORMAT(TempLineDimOption.Code)); xlWorkSheet.Range(ColInInteger(2)+FORMAT(i)+':'+ColInInteger(2)+FORMAT(i))._BorderAround(1,2); xlWorkSheet.Range(ColInInteger(2)+FORMAT(i)+':'+ColInInteger(2)+FORMAT(i)).EntireColumn.AutoFit; Col:=3; TempColumnDimOption.RESET; cnt:=TempColumnDimOption.COUNT; IF TempColumnDimOption.FINDSET THEN REPEAT IF ColumnDimOption=ColumnDimOption::Period THEN BEGIN Date1:=TempColumnDimOption."Period Start"; Date2:=TempColumnDimOption."Period End"; END; CASE ColumnDimOption OF ColumnDimOption::Element: element1:=TempColumnDimOption.Code; ColumnDimOption::"Element Group": elementgroup1:=TempColumnDimOption.Code; ColumnDimOption::Employee: emp1:=TempColumnDimOption.Code; ColumnDimOption::"Org. Unit": organizatunit1:=TempColumnDimOption.Code; END; SumAmount1:=0; SumAmount1:=CalcPayroll1(COMPANYNAME,Date1,Date2,element1,emp1,organizatunit1,elementgroup1); TotalSum+=SumAmount1; IF SumAmount1<>0 THEN xlWorkSheet.Cells.Item(i,Col,FORMAT(SumAmount1)); xlWorkSheet.Range(ColInInteger(Col)+FORMAT(i)+':'+ColInInteger(Col)+FORMAT(i))._BorderAround(1,2); xlWorkSheet.Range(ColInInteger(Col)+FORMAT(i)+':'+ColInInteger(Col)+FORMAT(i)).EntireColumn.AutoFit; Col:=Col+1; UNTIL TempColumnDimOption.NEXT=0; i:=i+1; xlWorkSheet.Cells.Item(i,Col-1,FORMAT(TotalSum)); xlWorkSheet.Range(ColInInteger(Col-1)+FORMAT(i)+':'+ColInInteger(Col-1)+FORMAT(i)).EntireColumn.AutoFit; END; UNTIL TempLineDimOption.NEXT=0; |
|
20.11.2013, 16:31 | #2 |
Участник
|
У вас не весь код приведен. Нет начала цикла по TempLineDimOption. TotalSum вы выводите внутри цикла, может вы просто не обнуляете эту переменную в цикле? Или она должна считаться с нарастающим итогом?
|
|
20.11.2013, 16:31 | #3 |
Участник
|
Чего дебаггер показывает? Заполняется TotalSum?
|
|
20.11.2013, 17:44 | #4 |
Участник
|
все не могу сделать тотал для каждой строки/столбца...
вот код, еще раз..( Код: xlWorkSheet.Cells.Item(1,2,'Àíàëèç çàðïëàòû ïî èçìåðåíèÿì'); xlWorkSheet.Cells.Item(2,2,'Ïåðèîä ñ '+FORMAT(periodstart)+' ïî '+FORMAT(periodend)); xlWorkSheet.Range(ColInInteger(2)+FORMAT(1)+':'+ColInInteger(2)+FORMAT(1)).Font.Bold:=TRUE; xlWorkSheet.Range(ColInInteger(2)+FORMAT(2)+':'+ColInInteger(2)+FORMAT(2)).EntireColumn.AutoFit; xlWorkSheet.Cells.Item(toprow,2,'Íàçâàíèå'); xlWorkSheet.Range(ColInInteger(2)+FORMAT(toprow)+':'+ColInInteger(2)+FORMAT(toprow)).Font.Bold:=TRUE; xlWorkSheet.Range(ColInInteger(2)+FORMAT(toprow)+':'+ColInInteger(2)+FORMAT(toprow)).HorizontalAlignment:=-4108; xlWorkSheet.Range(ColInInteger(2)+FORMAT(toprow)+':'+ColInInteger(2)+FORMAT(toprow)).VerticalAlignment:=-4108; xlWorkSheet.Range(ColInInteger(2)+FORMAT(toprow)+':'+ColInInteger(2)+FORMAT(toprow+2))._BorderAround(1,2); xlWorkSheet.Range(ColInInteger(2)+FORMAT(toprow)+':'+ColInInteger(2)+FORMAT(toprow+2)).Merge; TempColumnDimOption.RESET; TempLineDimOption.RESET; TempColumnDimOption.DELETEALL; TempLineDimOption.DELETEALL; pav.RESET; pav.SETRANGE(Code,salary); pav.FINDFIRST; totaltotal:=0; TotalSum:=0; CASE LineDimOption OF LineDimOption::Element: BEGIN PayrollElement.RESET; IF element<>'' THEN PayrollElement.SETFILTER(Code,element); IF PayrollElement.FINDSET THEN REPEAT TempLineDimOption.INIT; TempLineDimOption.Code:=PayrollElement.Code; TempLineDimOption.Name:=PayrollElement.Code; TempLineDimOption.INSERT; UNTIL PayrollElement.NEXT=0; END; LineDimOption::"Element Group": BEGIN PayrollElementGroup.RESET; IF elementgroup<>'' THEN PayrollElementGroup.SETFILTER(Code,elementgroup); IF PayrollElementGroup.FINDSET THEN REPEAT TempLineDimOption.INIT; TempLineDimOption.Code:=PayrollElementGroup.Code; TempLineDimOption.Name:=PayrollElementGroup.Code; TempLineDimOption.INSERT; UNTIL PayrollElementGroup.NEXT=0; END; LineDimOption::Employee: BEGIN Employee.RESET; IF emp<>'' THEN Employee.SETFILTER("No.",emp); IF Employee.FINDSET THEN REPEAT TempLineDimOption.INIT; TempLineDimOption.Code:=Employee."No."; TempLineDimOption.Name:=Employee."Full Name"; TempLineDimOption.INSERT; UNTIL Employee.NEXT=0; END; LineDimOption::"Org. Unit": BEGIN OrganizationUnit.RESET; IF organizatunit<>'' THEN OrganizationUnit.SETFILTER(Code,organizatunit); IF OrganizationUnit.FINDSET THEN REPEAT TempLineDimOption.INIT; TempLineDimOption.Code:=OrganizationUnit.Code; TempLineDimOption.Name:=OrganizationUnit.Code; TempLineDimOption.INSERT; UNTIL OrganizationUnit.NEXT=0; END; LineDimOption::Period: BEGIN CurDate:=periodstart; ii:=1; CASE PeriodType OF PeriodType::Day: Formula:='<1D>'; PeriodType::Week: Formula:='<1W>'; PeriodType::Month: Formula:='<1M>'; PeriodType::Quarter: Formula:='<1Q>'; PeriodType::Year: Formula:='<1Y>'; END; REPEAT CASE PeriodType OF PeriodType::Day: LastDate:=CurDate; PeriodType::Week: LastDate:=CALCDATE('<1W-1D>',CurDate); PeriodType::Month: LastDate:=CALCDATE('<1M-1D>',CurDate); PeriodType::Quarter: LastDate:=CALCDATE('<1Q-1D>',CurDate); PeriodType::Year: LastDate:=CALCDATE('<1Y-1D>',CurDate); END; TempLineDimOption.INIT; TempLineDimOption.Code:=FORMAT(ii); TempLineDimOption.Name:=FORMAT(CurDate); TempLineDimOption."Period Start":=CurDate; TempLineDimOption."Period End":=LastDate; TempLineDimOption.INSERT; ii:=ii+1; CurDate:=CALCDATE(Formula,CurDate); UNTIL CurDate>periodend; END; END; CASE ColumnDimOption OF ColumnDimOption::Element: BEGIN PayrollElement.RESET; IF element<>'' THEN PayrollElement.SETFILTER(Code,element); IF PayrollElement.FINDSET THEN REPEAT TempColumnDimOption.INIT; TempColumnDimOption.Code:=PayrollElement.Code; TempColumnDimOption.Name:=PayrollElement.Code; TempColumnDimOption.INSERT; UNTIL PayrollElement.NEXT=0; END; ColumnDimOption::"Element Group": BEGIN PayrollElementGroup.RESET; IF elementgroup<>'' THEN PayrollElementGroup.SETFILTER(Code,elementgroup); IF PayrollElementGroup.FINDSET THEN REPEAT TempColumnDimOption.INIT; TempColumnDimOption.Code:=PayrollElementGroup.Code; TempColumnDimOption.Name:=PayrollElementGroup.Code; TempColumnDimOption.INSERT; UNTIL PayrollElementGroup.NEXT=0; END; ColumnDimOption::Employee: BEGIN Employee.RESET; IF emp<>'' THEN Employee.SETFILTER("No.",emp); IF Employee.FINDSET THEN REPEAT TempColumnDimOption.INIT; TempColumnDimOption.Code:=Employee."No."; TempColumnDimOption.Name:=Employee."Full Name"; TempColumnDimOption.INSERT; UNTIL Employee.NEXT=0; END; ColumnDimOption::"Org. Unit": BEGIN OrganizationUnit.RESET; IF organizatunit<>'' THEN OrganizationUnit.SETFILTER(Code,organizatunit); IF OrganizationUnit.FINDSET THEN REPEAT TempColumnDimOption.INIT; TempColumnDimOption.Code:=OrganizationUnit.Code; TempColumnDimOption.Name:=OrganizationUnit.Code; TempColumnDimOption.INSERT; UNTIL OrganizationUnit.NEXT=0; END; ColumnDimOption::Period: BEGIN CurDate:=periodstart; ii:=1; CASE PeriodType OF PeriodType::Day: Formula:='<1D>'; PeriodType::Week: Formula:='<1W>'; PeriodType::Month: Formula:='<1M>'; PeriodType::Quarter: Formula:='<1Q>'; PeriodType::Year: Formula:='<1Y>'; END; REPEAT CASE PeriodType OF PeriodType::Day: LastDate:=CurDate; PeriodType::Week: LastDate:=CALCDATE('<1W-1D>',CurDate); PeriodType::Month: LastDate:=CALCDATE('<1M-1D>',CurDate); PeriodType::Quarter: LastDate:=CALCDATE('<1Q-1D>',CurDate); PeriodType::Year: LastDate:=CALCDATE('<1Y-1D>',CurDate); END; TempColumnDimOption.INIT; TempColumnDimOption.Code:=FORMAT(ii); TempColumnDimOption.Name:=FORMAT(CurDate); TempColumnDimOption."Period Start":=CurDate; TempColumnDimOption."Period End":=LastDate; TempColumnDimOption.INSERT; ii:=ii+1; CurDate:=CALCDATE(Formula,CurDate); UNTIL CurDate>periodend; END; END; Col:=3; TempColumnDimOption.RESET; cnt:=TempColumnDimOption.COUNT; IF TempColumnDimOption.FINDSET THEN REPEAT xlWorkSheet.Cells.Item(toprow,Col,FORMAT(TempColumnDimOption.Name)); xlWorkSheet.Range(ColInInteger(Col)+FORMAT(toprow)+':'+ColInInteger(Col)+FORMAT(toprow)).Font.Bold:=TRUE; xlWorkSheet.Range(ColInInteger(Col)+FORMAT(toprow)+':'+ColInInteger(Col)+FORMAT(toprow)).HorizontalAlignment:=-4108; xlWorkSheet.Range(ColInInteger(Col)+FORMAT(toprow)+':'+ColInInteger(Col)+FORMAT(toprow)).VerticalAlignment:=-4108; xlWorkSheet.Range(ColInInteger(Col)+FORMAT(toprow)+':'+ColInInteger(Col)+FORMAT(toprow+2))._BorderAround(1,2); xlWorkSheet.Range(ColInInteger(Col)+FORMAT(toprow)+':'+ColInInteger(Col)+FORMAT(toprow+2)).Merge; xlWorkSheet.Range(ColInInteger(Col)+FORMAT(toprow)+':'+ColInInteger(Col)+FORMAT(toprow)).EntireColumn.AutoFit; Col:=Col+1; UNTIL TempColumnDimOption.NEXT=0; w:=0; Window.OPEN('Ïîñòðîåíèå îò÷åòà @1@@@@@@@@@@@@@@@@@@@@@'); i:=7; TempLineDimOption.RESET; cnt:=TempLineDimOption.COUNT; IF TempLineDimOption.FINDSET THEN REPEAT w+=1; Window.UPDATE(1,ROUND(w/cnt*10000,1)); element1:=''; emp1:=''; organizatunit1:=''; elementgroup1:=''; CASE LineDimOption OF LineDimOption::Element: element1:=TempLineDimOption.Code; LineDimOption::"Element Group": elementgroup1:=TempLineDimOption.Code; LineDimOption::Employee: emp1:=TempLineDimOption.Code; LineDimOption::"Org. Unit": organizatunit1:=TempLineDimOption.Code; END; Date1:=periodstart; Date2:=periodend; IF LineDimOption=LineDimOption::Period THEN BEGIN Date1:=TempLineDimOption."Period Start"; Date2:=TempLineDimOption."Period End"; END; TotalSum:=0; IF HideNull THEN BEGIN TempColumnDimOption.RESET; IF TempColumnDimOption.FINDSET THEN REPEAT IF ColumnDimOption=ColumnDimOption::Period THEN BEGIN Date1:=TempColumnDimOption."Period Start"; Date2:=TempColumnDimOption."Period End"; END; CASE ColumnDimOption OF ColumnDimOption::Element: element1:=TempColumnDimOption.Code; ColumnDimOption::"Element Group": elementgroup1:=TempColumnDimOption.Code; ColumnDimOption::Employee: emp1:=TempColumnDimOption.Code; ColumnDimOption::"Org. Unit": organizatunit1:=TempColumnDimOption.Code; END; SumAmount1:=CalcPayroll1(COMPANYNAME,Date1,Date2,element1,emp1,organizatunit1,elementgroup1); TotalSum+=SumAmount1; totaltotal+=SumAmount1; UNTIL TempColumnDimOption.NEXT=0; END; IF ((TotalSum<>0) AND HideNull) OR (NOT HideNull) THEN BEGIN xlWorkSheet.Cells.Item(i,2,FORMAT(TempLineDimOption.Name)); xlWorkSheet.Range(ColInInteger(2)+FORMAT(i)+':'+ColInInteger(2)+FORMAT(i))._BorderAround(1,2); xlWorkSheet.Range(ColInInteger(2)+FORMAT(i)+':'+ColInInteger(2)+FORMAT(i)).EntireColumn.AutoFit; Col:=3; TempColumnDimOption.RESET; cnt:=TempColumnDimOption.COUNT; IF TempColumnDimOption.FINDSET THEN REPEAT IF ColumnDimOption=ColumnDimOption::Period THEN BEGIN Date1:=TempColumnDimOption."Period Start"; Date2:=TempColumnDimOption."Period End"; END; CASE ColumnDimOption OF ColumnDimOption::Element: element1:=TempColumnDimOption.Code; ColumnDimOption::"Element Group": elementgroup1:=TempColumnDimOption.Code; ColumnDimOption::Employee: emp1:=TempColumnDimOption.Code; ColumnDimOption::"Org. Unit": organizatunit1:=TempColumnDimOption.Code; END; SumAmount1:=CalcPayroll1(COMPANYNAME,Date1,Date2,element1,emp1,organizatunit1,elementgroup1); IF SumAmount1<>0 THEN xlWorkSheet.Cells.Item(i,Col,FORMAT(SumAmount1)); xlWorkSheet.Range(ColInInteger(Col)+FORMAT(i)+':'+ColInInteger(Col)+FORMAT(i))._BorderAround(1,2); xlWorkSheet.Range(ColInInteger(Col)+FORMAT(i)+':'+ColInInteger(Col)+FORMAT(i)).EntireColumn.AutoFit; Col:=Col+1; UNTIL TempColumnDimOption.NEXT=0; i:=i+1; END; UNTIL TempLineDimOption.NEXT=0; xlWorkSheet.Cells.Item(i,Col-1,FORMAT(totaltotal)); xlWorkSheet.Range(ColInInteger(Col-1)+FORMAT(i)+':'+ColInInteger(Col-1)+FORMAT(i)).EntireColumn.AutoFit; Window.CLOSE; |
|
20.11.2013, 18:10 | #5 |
Участник
|
Либо может есть какая то функция в навике? которая сможет свести строки/столбцы и подсчитать этот TOTAL
|
|
20.11.2013, 18:22 | #6 |
Участник
|
Нашел формулу в екселе
Код: Sub Ìàêðîñ2() ' ' Ìàêðîñ2 Ìàêðîñ ' ' Range("C11").Select ActiveCell.FormulaR1C1 = "=SUM(R[-10]C[-1]:worshippy:/>[-1]C[-1])" Range("C12").Select End Sub |
|
20.11.2013, 18:24 | #7 |
Участник
|
Таблицы скулевые. Можно вообще скрипт в VBA написать при желании..
Но у нас НАВ. Так что говорит дебаггер? Я пока не понял. Переменная вообще не заполняется? Или заполняется, но неверно? Пробегитесь, посмотрите - поймете, в чем ошибка я думаю. Чего на кофейной гуще гадать. |
|
20.11.2013, 18:32 | #8 |
Участник
|
Цитата:
точно такое же и для столбцов. |
|
21.11.2013, 09:05 | #9 |
Участник
|
В приведенном во втором случае коде, вы вообще не выводите переменную TotalSum, вы выводите только totaltotal в конце всех строк.
Формулу в Excel можно вывести с помощью: Код: XLSheet.Range('A1').FormulaR1C1 := 'тут ваша формула'; |
|
21.11.2013, 12:48 | #10 |
Участник
|
Цитата:
сделал вот так Код: xlWorkSheet.Range(ColInInteger(Col)+FORMAT(i)+':'+ ColInInteger(Col)+FORMAT(i)).FormulaR1C1(STRSUBSTNO(Text002,i-firstrow,1)); и ,00 (два ноля после суммы) |
|
21.11.2013, 15:45 | #11 |
Участник
|
Заливка:
Код: Red := 255; Green := 5287936; xlSheet.Range('A1').Interior.Color := Red; xlSheet.Range('B1').Interior.Color := Green; Код: xlRange.NumberFormat := '0.00'; |
|
21.11.2013, 16:38 | #12 |
Участник
|
|
|