public void CalcAusgleichsdatumNachBelegNr() { DateTime SollBelegDat; DateTime HabenFaelDat; decimal? sollValue = null; decimal? habenValue = null; for (int i = 2; i <= lastRow; i++) { habenValue = Convert.ToDecimal(sheet.Cells[i, colHaben].Value); if (habenValue != null && habenValue > 0) { double dateHaben = ((Excel.Range)sheet.Cells[i, colFaelDat]).Value2; HabenFaelDat = DateTime.FromOADate(dateHaben); var BelegNrHaben = ((Excel.Range)sheet.Cells[i, colBelegNr]).Value2; TimeSpan diff; for (int j = 2; j < lastRow; j++) { var BelegNrSoll = ((Excel.Range)sheet.Cells[j, colBelegNr]).Value2; sollValue = Convert.ToDecimal(sheet.Cells[j, colSoll].Value); if (BelegNrHaben == BelegNrSoll && sollValue != null && sollValue == habenValue) { double dateSoll = ((Excel.Range)sheet.Cells[j, colFaelDat]).Value2; SollBelegDat = DateTime.FromOADate(dateSoll); diff = SollBelegDat.Subtract(HabenFaelDat); sheet.Cells[i, lastCol].Value2 = diff.TotalDays.ToString(); } else { continue; } } } } }
public void CalcAusgleichsdatumNachFaelligkeitFiFo() { //int lastRow = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row; //int newCol = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Column + 1; int countHaben = 2; int countHabenOld = 0; DateTime SollBelegDat; DateTime HabenFaelDat; decimal? sollValue = null; decimal? habenValue = null; for (int i = 2; i <= lastRow; i++) { sollValue = Convert.ToDecimal(sheet.Cells[i, colSoll].Value); if (sollValue != null && sollValue > 0) { double dateSoll = ((Excel.Range)sheet.Cells[i, colBuDat]).Value2; SollBelegDat = DateTime.FromOADate(dateSoll); TimeSpan diff; while (sollValue > 0) { if (countHaben > countHabenOld) { var test = sheet.Cells[countHaben, colHaben].Value2; habenValue = (decimal?)sheet.Cells[countHaben, colHaben].Value2; countHabenOld = countHaben; } if (habenValue != null) { if (habenValue != 0) { if (habenValue < 0) { sollValue -= habenValue; countHaben++; continue; } double dateHaben = ((Excel.Range)sheet.Cells[countHaben, colFaelDat]).Value2; HabenFaelDat = DateTime.FromOADate(dateHaben); decimal?tempDiff = sollValue - habenValue; if (tempDiff >= 0) { diff = SollBelegDat.Subtract(HabenFaelDat); sheet.Cells[countHaben, lastCol].Value2 = diff.TotalDays.ToString(); sollValue -= habenValue; } else { habenValue -= sollValue; break; } } //else if(habenValue < 0) //{ // sollValue += (habenValue * -1); //} } countHaben++; } } } //SollWert ermitteln //Belegdatum festschreiben //Habenwert abziehen //soll wert größer 0 //belegdatum vom faelligkeitsdatum abziehen //nächsten haben wert ermitteln //haben wert abziehen //soll wert gleich 0 und haben wert größer 0 //nächsten soll wert ermitteln //neues belegdatum festschreiben //haben wert abziehen //soll wert gleich 0 und haben wert gleich 0 //nächsten soll wert ermitteln //belegdatum festschreiben //nächsten haben wert ermitteln //soll wert gleich 0 oder kleiner 0 und haben wert größer 0 //nächsten soll wert ermitteln //belegdatum schreiben //haben wert abziehen }