При формировании регламентированной отчетности и выгрузке данных в электронном виде пользователи и разработчики могут столкнуться с ситуацией, когда дата рождения физического лица или дата документа формируется с ошибками. Например, вместо стандартного представления даты в формате 13.11.1964 в результирующий XML-файл выгружается строка вида ДатаРожд="13.11.64 0" или дата обрезается до формата с двузначным годом ДД.ММ.ГГ. Разберем причины возникновения такой неполадки и детально рассмотрим варианты ее устранения.
Проанализируем механизм, из-за которого происходит сбой представления даты в результирующем файле:
Формат() с локальным шаблоном ДЛФ=Д, платформа 1С ориентируется на текущие настройки региональных стандартов. Если в операционной системе пользователя или в параметрах базы краткий формат даты настроен как дд.ММ.гг, платформа преобразует дату без указания века.ДД.ММ.ГГГГ). При получении укороченной 8-значной даты (13.11.64) алгоритм захватывает следующие за ней символы времени или пробелы, что приводит к появлению артефактов вида 13.11.64 0.Самый быстрый и надежный способ решить проблему глобально для всех пользователей без изменения программного кода — зафиксировать единые региональные стандарты на уровне самой базы данных. Выполним следующие шаги:
Русский (Россия).dd.MM.yyyy или дд.ММ.гггг).После применения параметров перезапустим сеанс «1С:Предприятия» в пользовательском режиме и повторно сформируем файл выгрузки регламентированного отчета.
Если параметры базы зависят от локали сеанса, необходимо скорректировать настройки операционной системы Windows:
dd.MM.yyyy).usr1cv8 или SYSTEM).Если нет возможности изменить общесистемные параметры, можно явно указать платформе код локализации для конкретного рабочего места. Для этого в окне запуска «1С:Предприятия» выделим нужную базу, нажмем кнопку Изменить и в поле Дополнительные параметры запуска допишем ключ:
/VL ru_RU
Если регламентированный отчет является внешним или конфигурация снята с поддержки, наилучшим решением будет устранение неявного форматирования в коде обработки выгрузки. Заменим зависимые от локали функции явным указанием формата даты.
Посмотрим на пример вызова, который может давать сбой:
// Нежелательный вариант: формат зависит от настроек сеанса
СтрокаДаты = Формат(ФизЛицоДатаРождения, "ДЛФ=Д");
Исправим код, применив жесткое форматирование без привязки к локальным стандартам пользователя:
// Корректный вариант: формат строго зафиксирован
СтрокаДаты = Формат(ФизЛицоДатаРождения, "ДФ=dd.MM.yyyy");
Использование явной форматной строки "ДФ=dd.MM.yyyy" гарантирует получение даты ровно из 10 символов с четырехзначным годом независимо от конфигурации клиентской машины и параметров сеанса.