Почему в 1С залипает дата при создании документов и как это исправить

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

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

Анализ механизма рабочей даты в платформе 1С

Самая распространенная причина, из-за которой новые документы создаются с одной и той же прошедшей датой, кроется во встроенном механизме рабочей даты платформы. Разберем, как этот механизм устроен.

В настройках клиентского приложения (меню Сервис → Параметры, вкладка Общие) присутствует параметр Использовать текущую дату компьютера. Если пользователь случайно или намеренно снимает этот флаг и задает конкретную дату, платформа перестает запрашивать актуальное системное время операционной системы. Вместо этого в сеансе принудительно активируется статическая рабочая дата.

Особенности поведения рабочей даты:

  1. Зафиксированная дата сохраняется в системных настройках пользователя внутри информационной базы. Она не сбрасывается при перезапуске клиентского приложения или перезагрузке операционной системы.
  2. При интерактивном создании новых объектов метаданных (документов, задач, бизнес-процессов) в реквизит Дата по умолчанию помещается именно рабочая дата сеанса, а не системное время.
  3. Если запускать информационную базу через конфигуратор в режиме отладки, сеанс может стартовать под администратором разработки либо с ключами запуска, которые игнорируют персональные интерфейсные параметры сеанса. В результате разработчик видит корректное время, в то время как у конечного пользователя дата остается устаревшей.

Чтобы вернуть стандартное поведение, пользователю необходимо открыть параметры системы и вернуть флаг Использовать текущую дату компьютера.

Программный контроль даты при открытии форм и создании объектов

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

В управляемых формах отборы и начальные значения часто устанавливаются в обработчиках ПриСозданииНаСервере и ПриОткрытии. Посмотрим на пример кода установки отборов динамического списка формы:


&НаКлиенте
Процедура УстановитьПараметрыОтбораПользователя()
    ЭлементыОтбора = Список.Отбор.Элементы;
    ЭлементыОтбора.Очистить();
    
    Если Не ОтборОрганизация.Пустая() Тогда
        ЭлементОтбораОрганизация = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбораОрганизация.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
        ЭлементОтбораОрганизация.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбораОрганизация.Использование = Истина;
        ЭлементОтбораОрганизация.ПравоеЗначение = ОтборОрганизация;
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ОтборОрганизация = Пользователи.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация");
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    УстановитьПараметрыОтбораПользователя();
КонецПроцедуры

Обратите внимание на различия системных функций работы со временем, которые могут применяться в модулях:

  1. Функция ТекущаяДата() возвращает физическое системное время устройства, на котором исполняется вызов. На клиенте это часы рабочей станции, на сервере — часы сервера приложений. При рассинхронизации системных часов клиента и сервера возникнут скачки дат при переходе между клиентским и серверным контекстом.
  2. Функция ТекущаяДатаСеанса() возвращает серверное время с поправкой на часовой пояс текущего сеанса. В многопользовательской среде и клиент-серверной архитектуре для заполнения реквизитов документов рекомендуется применять именно ТекущаяДатаСеанса().

Сбои серверных служб и очистка кэша

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

Разберем по шагам регламент сброса серверного окружения:

  1. Завершим все активные пользовательские подключения в консоли администрирования кластера серверов 1С.
  2. Остановим службу сервера приложений 1С (Агент сервера 1С:Предприятия) и службу СУБД (MS SQL Server / PostgreSQL).
  3. Выполним очистку сеансовых данных сервера: в каталоге служебных файлов кластера (каталог srvinfo) удалим временные файлы с префиксом snccntx. Это сбросит поврежденные дескрипторы зависших сеансов.
  4. Запустим службу СУБД, а затем службу кластера 1С.

Устранение ошибки «Несоответствие свойства и элемента данных XDTO...»

Нередко после перезапуска сервера 1С или СУБД пользователи сталкиваются с новой критической ошибкой: «Несоответствие свойства и элемента данных XDTO: свойство kind». Проанализируем причину ее появления.

В управляемом клиенте платформа передает описание интерфейсных структур и состояние метаданных формы между сервером и клиентом через пакеты XDTO. Если на рабочем месте пользователя сохранился старый локальный кэш конфигурации, а сервер приложений перезапустился и обновил структуры контекста, возникает рассинхронизация сериализации. Тонкий клиент ожидает одну схему типов, а сервер возвращает измененный набор свойств.

Для полного устранения этой ошибки выполним следующие действия:

  1. Закроем все запущенные экземпляры 1cv8c.exe и 1cv8.exe на компьютере пользователя.
  2. Очистим локальный кэш пользователя. Для этого удалим содержимое каталогов временных файлов 1С в профиле пользователя: %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8 (удалению подлежат подпапки с длинными буквенно-цифровыми GUID-именами).
  3. Если ошибка сохраняется, сбросим пользовательские настройки формы: в режиме 1С:Предприятие перейдем в раздел администрирования, откроем Настройки пользователей и прав → Хранилище пользовательских настроек и очистим сохраненные настройки проблемного документа для конкретной учетной записи.

Своевременный контроль настройки Использовать текущую дату компьютера, корректное использование функции ТекущаяДатаСеанса() в процедурах заполнения и регулярная очистка поврежденного кэша обеспечивают надежную и стабильную работу пользователей без искажения учетных данных.

← На главную