lihongji
2024-10-15 224bc6082b06f53755ee7e834d78e17f51cb0fa2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Quintiq file version 2.0
#parent: #root
Method AfterImport
{
  TextBody:
  [*
    // 甄兰鸽 Jun-24-2024 (created)
    allunit                 := FinancialProductionReport::GetDefaultAllUnit();
    table                   := selectobject( this.MacroPlan(), FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and not table.IsShow() );
    yearday                 := this.MacroPlan().StartOfPlanning().StartOfYear();
    beforeyearday           := ( yearday - Duration::Days( 1 ) ).Date();
    cnv2                    := StringToDate::StandardConverter();
    cnv2.SetCustomConversion();
    //cnv2.CustomFormatString( "M2/D2/Y" );
    cnv2.CustomFormatString( "MM/dd/yyyy" );
    traverse( this, FinancialSalesReport, report ){
      productcolumn         := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Product' );
      unitcolumn            := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Unit' );
      
      traverse( report, FinancialSalesRow, row ){
        product             := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = productcolumn );
        unit                := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = unitcolumn );
        
        unitrow             := selectobject( table, FinancialSalesRow, unitrow, unitrow.Name() = product.Value() and unitrow.Unit() = unit.Value() );
        if( isnull( unitrow ) ){
          unitrow           := table.FinancialSalesRow( relnew, Name := product.Value(), Unit := unit.Value() );
        }
        allrow  := selectobject( table, FinancialSalesRow, allrow, allrow.Name() = product.Value() and allrow.Unit() = allunit );
        if( isnull( unitrow ) ){
          allrow            := table.FinancialSalesRow( relnew, Name := product.Value(), Unit := allunit );
        }
        
        traverse( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() <> productcolumn and cell.FinancialSalesColumn() <> unitcolumn ){
          column            := cell.FinancialSalesColumn();
          period            := cnv2.Convert( column.Name() )
          
          tablecolumn       := construct( FinancialSalesColumn );
          if( period = beforeyearday ){
            periodname      := yearday.Format( "M2/D2/Y" );
            //获取被导入报表的日期列
            tablecolumn     := selectobject( table, FinancialSalesColumn, fscolumn, not fscolumn.IsDay() and fscolumn.Name() = periodname );
            if( isnull( tablecolumn ) ){
              tablecolumn   := table.FinancialSalesColumn( relnew, Name := periodname, Period := yearday.Date() );
            }
          }else{
            tablecolumn     := selectobject( table, FinancialSalesColumn, fscolumn, not fscolumn.IsDay() and fscolumn.Name() = column.Name() );
            if( isnull( tablecolumn ) ){
              tablecolumn   := table.FinancialSalesColumn( relnew, Name := column.Name(), Period := cnv2.Convert( column.Name() ) );
            }
          }
          unitcell := selectobject( unitrow, FinancialSalesCell, unitcell, unitcell.FinancialSalesColumn().Name() = column.Name() );
          if( isnull( unitcell ) ){
            unitcell        := tablecolumn.FinancialSalesCell( relnew, Value := cell.Value() );
            unitrow.FinancialSalesCell( relinsert, unitcell );
          }else{
            if( unitcell.Value() <> cell.Value() ){
              unitcell.Value( cell.Value() );
              unitcell.IsUpdate( true );
            }
          }
          allcell  := selectobject( allrow, FinancialSalesCell, allcell, allcell.FinancialSalesColumn().Name() = column.Name() );
          if( isnull( unitcell ) ){
            allcell         := tablecolumn.FinancialSalesCell( relnew, Value := cell.Value() );
            allrow.FinancialSalesCell( relinsert, allcell );
          }else{
            if( allcell.Value() <> cell.Value() ){
              allcell.Value( cell.Value() );
              allcell.IsUpdate( true );
            }
          }
        }
      }
    }
  *]
}