Многие пользователи и бухгалтеры, работающие в программах семейства «1С:Предприятие», начинают сталкиваться с неприятной особенностью системы при вводе дат будущих периодов. Ситуация выглядит следующим образом: при попытке ввести дату сокращенно, например, 01.05.30, система автоматически преобразует ее в 01.05.1930. В то же время ввод 01.05.29 корректно интерпретируется как 01.05.2029. В данной статье мы подробно разберем, почему так происходит, и рассмотрим все доступные способы решения этой проблемы без необходимости внесения изменений в конфигурацию.
Для начала проанализируем ситуацию с технической точки зрения. В мире информационных технологий для экономии времени ввода и места в базах данных исторически сложилось использование двузначного формата года. Чтобы компьютер понимал, к какому веку относится число «30» — к двадцатому или двадцать первому, используется алгоритм под названием «скользящее окно столетия».
Суть алгоритма заключается в определении столетнего интервала. Если введенное число попадает в этот интервал, система сопоставляет его с соответствующим веком. В старых версиях платформы 1С и в настройках многих операционных систем Windows по умолчанию была жестко задана верхняя граница этого окна, которая часто заканчивалась на 2029 годе. Именно поэтому число «29» платформа еще «узнает» как будущее, а «30» уже считает прошлым веком. Рассмотрим подробнее, как это можно исправить на разных уровнях.
Это самый эффективный метод, позволяющий решить проблему без программирования и изменения кода 1С. Платформа 1С:Предприятие при запуске считывает настройки системного календаря Windows и ориентируется на них. Если на вашем рабочем месте ввод «30» превращается в «1930», значит, в настройках Windows указан именно такой диапазон.
Рассмотрим пошагово, как изменить этот параметр:
После выполнения этих действий перезапустите 1С и проверьте ввод даты. Теперь система должна корректно подставлять 2030 год.
Проанализируем влияние версии программного обеспечения на возникновение данной ошибки. Разработчики компании 1С знают о приближении границы «окна столетия» и в новых релизах платформы внесли коррективы в логику по умолчанию. Выясним, на каких версиях проблема уходит сама собой.
Практика показывает, что в версиях платформы 8.3.13, 8.3.15 и 8.3.16 проблема проявляется очень часто, так как внутренние механизмы этих версий ориентированы на старые стандарты. Однако, начиная с версии 8.3.18 и выше, точка перелома была программно сдвинута вперед. Если у вас есть возможность обновить платформу (не конфигурацию, а именно саму программу 1С:Предприятие), это может стать долгосрочным решением проблемы для всей организации.
Хотя в теме обсуждалась возможность решения без изменения конфигурации, в некоторых случаях это может быть необходимо, если настройки Windows по каким-то причинам не применяются (например, в терминальной среде или при специфических правах доступа). В языке 1С существует специальный глобальный метод, позволяющий принудительно задать границы века для всей базы данных.
Выясним, какой программный код за это отвечает. В модуле управляемого приложения (или обычном модуле приложения) можно использовать процедуру УстановитьГодНачалаСтолетия(). Посмотрим на пример реализации:
Процедура ПриНачалеРаботыСистемы()
// Устанавливаем начало столетия 1950 год.
// Это значит, что все двузначные числа от 50 до 99 будут 19xx,
// а от 00 до 49 будут трактоваться как 20xx.
УстановитьГодНачалаСтолетия(1950);
КонецПроцедуры
Использование этого метода гарантирует, что на любом компьютере, независимо от настроек Windows, ввод даты будет интерпретироваться единообразно. Если вы решите применить этот способ, обратитесь к вашему системному администратору или программисту 1С для внесения этой небольшой правки в модуль приложения.
Проанализируем ситуацию, когда база данных работает в клиент-серверном варианте (SQL-вариант). В этом случае часть кода может выполняться на стороне сервера приложений 1С. Если вы изменили настройки региональных стандартов на своем компьютере, но при формировании документов на сервере (например, через фоновые задания) даты продолжают ставиться неверно, необходимо проверить региональные настройки на самом сервере.
Важные моменты для серверной настройки:
ragent (служба сервера 1С).Разберем, как можно обезопасить себя от ошибок, если технические настройки еще не применены:
01.05.2030 полностью, система никогда не ошибется в интерпретации века. Это полностью исключает неоднозначность.ДФ=dd.MM.yy. Если вы видите, что год отображается только двумя цифрами, это повод попросить технического специалиста изменить формат отображения на dd.MM.yyyy, чтобы вы сразу видели результат автоподстановки.Подводя итог, можно сказать, что проблема «1930 года» является ожидаемой технической особенностью устаревающих версий программного обеспечения. Совместная работа пользователя и системного администратора по настройке региональных стандартов Windows или обновлению платформы позволяет полностью устранить это неудобство и обеспечить корректную работу системы на десятилетия вперед.