При обновлении платформы 1С:Предприятие с устаревших версий (например, 8.3.7 или 8.3.10) на более современные релизы, такие как 8.3.13 или 8.3.14, системные администраторы и разработчики часто сталкиваются с крайне неприятным поведением системы. Внезапно стандартные функции работы с датами в запросах начинают возвращать пустое значение (01.01.0001). Типичный пример — вызов НачалоПериода(Документ.Дата, День), который вместо ожидаемого начала дня выдает пустую дату, что ломает логику отчетов, проведение документов и работу динамических списков.
В данной статье мы подробно разберем причины возникновения этой проблемы, проанализируем взаимосвязь между сервером приложений 1С и драйверами баз данных, а также составим пошаговый алгоритм устранения ошибки.
Для начала проанализируем техническую сторону вопроса. Начиная с версии 8.3.13, компания «1С» существенно переработала механизм трансляции (генерации) кода внутреннего языка запросов 1С в диалект T-SQL, используемый Microsoft SQL Server. Платформа стала использовать более современные и оптимизированные конструкции для арифметических операций с датами и временем.
Выясним причину, почему ошибка проявляется выборочно. Как отмечают специалисты на форумах, функции НачалоПериода с параметрами «Неделя», «Час» или «Минута» могут продолжать работать корректно, в то время как «День», «Месяц» и «Год» начинают возвращать NULL (в терминах SQL) или пустую дату (в терминах 1С). Это связано с тем, что для вычисления календарного начала дня, месяца и года платформа формирует специфические математические выражения через функции DATEADD и DATEDIFF, опираясь на базовые системные даты.
Если на сервере приложений 1С установлены устаревшие компоненты доступа к данным (стандартный драйвер «SQL Server», входящий в состав Windows), они не всегда могут корректно обработать результат выполнения таких запросов, либо передают параметры в формате, который SQL-сервер интерпретирует как ошибочный. В итоге вместо даты мы получаем пустое значение.
Основным решением, которое подтвердили многие пользователи, столкнувшиеся с проблемой, является установка актуальной версии SQL Server Native Client 11.0 на сервере приложений 1С. Важно понимать: даже если сам MS SQL Server версии 2016 или 2019 находится на другом физическом сервере, драйвер должен быть обновлен именно там, где запущены процессы rphost сервера 1С.
Рассмотрим порядок действий для исправления ситуации:
sqlncli.msi. Обычно он входит в состав Microsoft SQL Server 2012 Feature Pack, но совместим со всеми последующими версиями SQL Server.Важное замечание: использование самого нового драйвера MSOLEDBSQL (Microsoft OLE DB Driver for SQL Server) на версиях платформы 8.3.13 и 8.3.14 не всегда помогало, так как платформа в тот период была жестко ориентирована на Native Client 11.0.
Иногда простого обновления драйвера недостаточно, так как сервер 1С кэширует планы запросов и метаданные таблиц. Если вы уже установили драйвер, но НачалоПериода все еще глючит, выполним следующие шаги:
C:\Program Files\1cv8\srvinfo).snccntxt. Также можно безопасно очистить содержимое всех временных папок внутри каталога сервера приложений.Проанализируем сопутствующие симптомы. Часто при переходе на 8.3.14 пользователи жалуются, что база «падает в 0» при попытке загрузки файла .dt или при выполнении ТИИ. Это происходит из-за того, что новые версии платформы предъявляют более жесткие требования к целостности структуры базы данных.
Посмотрим на пример правильной последовательности действий при обновлении:
.dt и обновление платформы.Обсудим еще один важный аспект, упомянутый в теме: проблемы с интерфейсом после перехода на 8.3.13+. В этих релизах 1С изменила механизм работы с DPI (масштабированием). В результате в конфигурациях на «Обычных формах» (например, УПП 1.3 или старые версии ЗУП) могут «слетать» привязки элементов управления, а окна перестают растягиваться.
Если вы столкнулись с этим, разберем возможные пути решения:
Во-первых, в свойствах корневого узла конфигурации можно попробовать изменить Режим совместимости интерфейса на «Версия 8.2». Это вернет старый алгоритм отрисовки форм.
Во-вторых, обратите внимание на режим использования модальных окон. Новые платформы по умолчанию ожидают работу в режиме «Такси», что конфликтует со старой логикой обычных форм. Посмотрите на настройки конфигурации:
// В некоторых случаях помогает принудительная установка
// режима совместимости в свойствах конфигурации:
// РежимСовместимости = Из_Версии_8_2;
// РежимИспользованияМодальныхОкон = Использовать;
Подводя итог, можно сказать, что переход на платформу 8.3.13 и выше требует от администратора особого внимания к системному окружению. Ошибка с пустой датой в функции НачалоПериода — это классический признак несоответствия версии клиентских компонент SQL Server требованиям платформы.
Краткий чек-лист для исправления:
snccntxt).Проанализировав ситуацию, мы видим, что большинство «глюков» новых платформ лечатся не откатом назад, а правильной настройкой инфраструктуры и обновлением драйверов. Помните, что современные конфигурации (такие как ЗУП 3.1 или CRM) требуют последних версий платформы, поэтому настройка корректной работы 8.3.14 и выше является необходимой задачей для любого специалиста 1С.