Do you want to adjust the percentages before or after the script is run to produce these dates?
The percentages would be determined and adjusted before the script is run. I imagine myself adjusting the percentages in the script occasionally to better reflect the actual sales cycles that develop as the sales guys start using this tool.
Your "timeline" could be a set of related records or a set of fields in the same record. Either way, you can set up your percentages to mirror the same structure and your script can loop through them to compute the needed "milestone" dates.
Let's say that you create related records for your time line, one record for each milestone.
Schedule::anyField x Projects::anyField
Projects::__pkProjectID = TimeLine::_fkProjectID
Schedule has one records for each milestone percentage.
Set Variable [$Pcts ; value: List ( Schedule::Pcts ) ]
Set Variable [$ProjectID ; Value: Projects::__pkProjectID ]
Set Variable [$StartDate ; Value: Projects::StartDate ]
Set Variable [$Months ; Value: Projects::MonthsToComplete ]
Go to Layout ["TimeLine" (TimeLine)]
Exit Loop If [ $K > ValueCount ( $Pcts ) ]
Set Variable [$K ; value: $K + 1 ]
Set Field [TimeLine::_fkProjectID ; $ProjectID ]
Set FIeld [TimeLine::mileStone ; Date ( Ceiling ( $Months * GetValue ( $Pcts ; $K ) ) ; Day ( $StartDate ) ; Year ( $StartDate ) ) ]
Go to Layout [Original Layout]
And a very small alteration of this can put each milestone date on the first of the calculated month rather than the same day as the Project Start date. Make sure that your percentages are either entered as their decimal equivalents or modify the calculation I've used to divide by 100.
Note: using a set of fields in one record, while it can work, is less flexible than using a set of related records.
I would redesign your database to replace those separate fields with a set of related records. A script could be used to move the data from existing records into such a set of related timeline records.
It makes it possible to create new and very different timelines for special projects or to adapt to changing business models simply by adding more records instead of defining more fields in the table.
Whether you do that or not, you can still create the schedule table I described exactly as I described it. It does not need to be a single record with multiple fields. What will change will be how the script loops through fields of a single record instead of looping to create a set of new related records.