Как резюме, привожу порядок действий, которые произвел для применения исправления KB3011878
1 Загрузить файл "windowstimezonerules.xml" (из исправления KB3011878) используя форму "TimezonePatchImport" (ее можно нейти в дереве АОТ)
При этом в систему будут загруженные новые временные зоны и правила их пересчета
То есть в списке енумов TimeZone появятся новые значения (после рестарта АОС).
В списке енумов будет уже два значения:
GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD (старое, с кодом 61)
GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD_RTZ2 (новое, с кодом 87)
2. Рестартовать АОС
3. Обновить пользователям новое значение временной зоны. Это можно сделать так
X++:
userInfo userInfo;
userInfo userInfoUpd;
int i;
;
while select userInfo
where userInfo.preferredTimeZone == TimeZone::GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD
{
try
{
ttsbegin;
select forupdate userInfoUpd
where userInfoUpd.Id == userInfo.id;
userInfoUpd.preferredTimeZone = TimeZone::GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD_RTZ2;
userInfoUpd.update();
ttscommit;
i++;
}
catch
{
error(userInfo.name);
}
}
info(strFmt("обновлено %1 записей пользователей", i));
При обновлении значения у активных пользователей возникнет ошибка. Поэтому нужно это делать либо когда активных пользователей нет,
либо просто завершить их сеансы принудительно.
4. Изменил в настройках формы "Данные компании" (CompanyInfo) значение часового пояса.
(Если есть активные пользователи - сделать это не получится. Поэтому изменил это прямо в таблице БД DATAAREA поле TIMEZONE заменил 61 на 87)
После этого стоит сделать рестарт АОС
5. Обновил настройки списков пакетных заданий - время запуска на час вперед + изменение значений часового пояса.
это можно сделать так
X++:
batchJob batchJob;
int i;
TimeZone batchTimeZone;
;
ttsbegin;
while select forupdate batchJob
{
batchTimeZone = conPeek(batchJob.RecurrenceData, 9);
if (batchTimeZone == TimeZone::GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD)
{
batchJob.OrigStartDateTime = DateTimeUtil::addHours(batchJob.OrigStartDateTime, 1);
batchJob.RecurrenceData = conPoke(batchJob.RecurrenceData, 9, TimeZone::GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD_RTZ2);
batchJob.update();
i++;
}
}
ttscommit;
info(strFmt("обновлено %1 пакетных заданий", i));
6 Просмотр всех мест в коде Аксапта, где использовано значение GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD
(через поиск в АОТ), с заменой на этого значения на GMTPLUS0300MOSCOW_STPETERSBURG_VOLGOGRAD_RTZ2
Может еще что забыл ?