Почему функция НачалоПериода возвращает пустую дату после обновления платформы 1С на 8.3.13 или 8.3.14 и как это исправить?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При обновлении платформы 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-сервер интерпретирует как ошибочный. В итоге вместо даты мы получаем пустое значение.

Решение №1: Установка и обновление SQL Server Native Client

Основным решением, которое подтвердили многие пользователи, столкнувшиеся с проблемой, является установка актуальной версии SQL Server Native Client 11.0 на сервере приложений 1С. Важно понимать: даже если сам MS SQL Server версии 2016 или 2019 находится на другом физическом сервере, драйвер должен быть обновлен именно там, где запущены процессы rphost сервера 1С.

Рассмотрим порядок действий для исправления ситуации:

  1. Определим разрядность вашего сервера 1С. Если вы используете 64-битную версию сервера приложений, вам необходим 64-битный установщик драйвера.
  2. Найдем пакет установки sqlncli.msi. Обычно он входит в состав Microsoft SQL Server 2012 Feature Pack, но совместим со всеми последующими версиями SQL Server.
  3. Установим компонент SQL Server Native Client 11.0 на сервере 1С.
  4. После установки драйвера крайне желательно перезагрузить службу Агент сервера 1С:Предприятия, чтобы процессы смогли инициализировать новые библиотеки доступа к данным.

Важное замечание: использование самого нового драйвера MSOLEDBSQL (Microsoft OLE DB Driver for SQL Server) на версиях платформы 8.3.13 и 8.3.14 не всегда помогало, так как платформа в тот период была жестко ориентирована на Native Client 11.0.

Решение №2: Очистка серверного кэша и переподключение базы

Иногда простого обновления драйвера недостаточно, так как сервер 1С кэширует планы запросов и метаданные таблиц. Если вы уже установили драйвер, но НачалоПериода все еще глючит, выполним следующие шаги:

  1. Остановим службу сервера 1С.
  2. Перейдем в каталог с данными сервера (по умолчанию это C:\Program Files\1cv8\srvinfo).
  3. Найдем папки с именами-идентификаторами баз (GUID) и удалим из них папку snccntxt. Также можно безопасно очистить содержимое всех временных папок внутри каталога сервера приложений.
  4. Запустим службу сервера 1С.
  5. В консоли администрирования кластера попробуем «переподключить» базу: удалим описание информационной базы из списка (без удаления самой базы на SQL-сервере!) и добавим его заново. Это принудительно обновит параметры соединения.

Проблема с Тестированием и Исправлением (ТИИ) и выгрузкой DT

Проанализируем сопутствующие симптомы. Часто при переходе на 8.3.14 пользователи жалуются, что база «падает в 0» при попытке загрузки файла .dt или при выполнении ТИИ. Это происходит из-за того, что новые версии платформы предъявляют более жесткие требования к целостности структуры базы данных.

Посмотрим на пример правильной последовательности действий при обновлении:

  1. Выполним полное Тестирование и исправление на старой, стабильной платформе (например, 8.3.12).
  2. Обязательно исправим все ошибки логической и ссылочной целостности.
  3. Только после этого выполним выгрузку в .dt и обновление платформы.
  4. Если база не загружается на 8.3.14, попробуем загрузить её на 8.3.12, обновить драйвер SQL на сервере и только потом подключать базу к новому серверу 1С.

Особенности интерфейса (Обычные формы и привязки)

Обсудим еще один важный аспект, упомянутый в теме: проблемы с интерфейсом после перехода на 8.3.13+. В этих релизах 1С изменила механизм работы с DPI (масштабированием). В результате в конфигурациях на «Обычных формах» (например, УПП 1.3 или старые версии ЗУП) могут «слетать» привязки элементов управления, а окна перестают растягиваться.

Если вы столкнулись с этим, разберем возможные пути решения:

Во-первых, в свойствах корневого узла конфигурации можно попробовать изменить Режим совместимости интерфейса на «Версия 8.2». Это вернет старый алгоритм отрисовки форм.

Во-вторых, обратите внимание на режим использования модальных окон. Новые платформы по умолчанию ожидают работу в режиме «Такси», что конфликтует со старой логикой обычных форм. Посмотрите на настройки конфигурации:


// В некоторых случаях помогает принудительная установка 
// режима совместимости в свойствах конфигурации:
// РежимСовместимости = Из_Версии_8_2;
// РежимИспользованияМодальныхОкон = Использовать;

Выводы и рекомендации

Подводя итог, можно сказать, что переход на платформу 8.3.13 и выше требует от администратора особого внимания к системному окружению. Ошибка с пустой датой в функции НачалоПериода — это классический признак несоответствия версии клиентских компонент SQL Server требованиям платформы.

Краткий чек-лист для исправления:

Проанализировав ситуацию, мы видим, что большинство «глюков» новых платформ лечатся не откатом назад, а правильной настройкой инфраструктуры и обновлением драйверов. Помните, что современные конфигурации (такие как ЗУП 3.1 или CRM) требуют последних версий платформы, поэтому настройка корректной работы 8.3.14 и выше является необходимой задачей для любого специалиста 1С.

← На главную