gifts2017

Исправление ошибки функции ПолучитьВремяИзменения()

Опубликовал Игорь Юсупов (OtTech) в раздел Программирование - Универсальные функции

При работе с файлами и каталогами выяснилось, что функция ПолучитьВремяИзменения() некорректно возвращает время.

Пример:
    дата изменения файла - 2015-01-01 10:00:00
    функция возвращает дату - 2015-01-01 11:00:00
  
В синтаксис помощнике в примечание к функции написано:
    В режиме совместимости выдает местное время последней модификации файла с ошибкой NTFS. Если файл изменен летом, а просматривается зимой, то полученное время отстает на 1 час. Если файл изменен зимой, а просматривается летом, то полученное время опережает на 1 час. Если установлен режим совместимости Версия8_2_13 или выше, то время выдается без ошибки.
    
Для корректировки времени была написана функция ПолучитьСмещениеВремени().

Пример использования функции: 

	СмещениеВремени = ПолучитьСмещениеВремени();
	ВремяИзменения = Файл.ПолучитьВремяИзменения() + СмещениеВремени;

Сама функция:

// Возвращает смещение времени из-за некорректной функции ПолучитьВремяИзменения()
// Часть примечание из описания функции:
//  В режиме совместимости выдает местное время последней модификации файла с ошибкой NTFS.
//  Если файл изменен летом, а просматривается зимой, то полученное время отстает на 1 час.
//  Если файл изменен зимой, а просматривается летом, то полученное время опережает на 1 час.
//
// Источник - http://infostart.ru/public/323233/
// Автор - OtTech http://infostart.ru/profile/492011/
//
// Возвращаемое значение:
// Число - Количество секунд смещения.
//
Функция ПолучитьСмещениеВремени()
	
	ИмяФайла = ПолучитьИмяВременногоФайла();
	
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.Записать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	
	Разница = ОКР((ТекущаяДата() - Файл.ПолучитьВремяИзменения()) / 3600);
	
	УдалитьФайлы(ИмяФайла);
	
	Возврат Разница * 3600;
	
КонецФункции

 

После использования функции дата стала такой же, как и при просмотре свойств файла.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Константин Юрин (kostyaomsk) 15.01.15 08:08
Хорошо что Вы нашли ошибку в функции платформы ПолучитьВремяИзменения() и предложили способ исправления. Так ведь и будет тянуться ошибка у разработчиков платформы 1С 8.
2. Римма Герасименко (WhiteOwl) 15.01.15 14:22
Вот из-за этой ошибки и не работает проверка отчетности ПФР программой CheckPFR из 1С.
3. Игорь Юсупов (OtTech) 15.01.15 16:22
Вот еще пример, где возникли проблемы из-за данной ошибки.
4. Андрей Акулов (DrAku1a) 21.01.15 10:39
(1)
Если установлен режим совместимости Версия8_2_13 или выше, то время выдается без ошибки.
, да вроде как они уже исправили.
5. Игорь Юсупов (OtTech) 21.01.15 12:49
(4) DrAku1a, к сожалению это не так, стоит режим совместимости Версия 8.3.4 и данная ошибка у меня возникает
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа