Показать сообщение отдельно
Старый 30.01.2018, 17:40   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Если смочь перевести часы на компьютере, где крутится АОС, то должно сработать. Правда у меня не получилось перевести часы )

Общий подход такой - есть 3 режима правки такого рода таблиц:Correction, CreateNewTimePeriod и EffectiveBased
Все режимы запрещают правку в прошлом периоде, однако в текущем и будущем периодах ведут себя по-разному:
Correction позволяет редактировать поля ValidFrom / ValidTo с последующей автоматической корректировкой дат у записей в прошлом / будущем периоде
CreateNewTimePeriod всегда дробит период
EffectiveBased - дробит только текущий период, а будущий правит в режиме Correction

Т.е. если мы убедим систему считать дату из прошлого датой из настоящего, то тогда текущий период можно разбить таким кодом:
X++:
    ttsBegin;
    dat = today() + 5; // Тут нужно поставить правильную дату
    select forUpdate validTimeState(dat) items;
    info(strFmt('Выбрана запись %1 со сроком с %2 по %3', items.name, items.ValidFrom, items.ValidTo));
    items.validTimeStateUpdateMode(ValidTimeStateUpdate::CreateNewTimePeriod);
    items.ValidFrom = dat;
    items.write();
    info(strFmt('Изменена запись %1 со сроком с %2 по %3', items.name, items.ValidFrom, items.ValidTo));
    ttsCommit;
где items - это таблица, которая имеет поле name и поля ValidFrom / ValidTo
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 30.01.2018 в 17:43.