В практике сопровождения баз 1С нередко возникает аномальное поведение: при создании новых документов или при открытии списков подставляется одна и та же зафиксированная дата из прошлого. При этом у других пользователей или при запуске базы из конфигуратора в режиме отладки дата может определяться абсолютно корректно. Выясним причину этой проблемы, разберем механизм фиксации даты, а также рассмотрим сопутствующие ошибки сериализации XDTO и способы их устранения.
Самая распространенная причина, из-за которой новые документы создаются с одной и той же прошедшей датой, кроется во встроенном механизме рабочей даты платформы. Разберем, как этот механизм устроен.
В настройках клиентского приложения (меню Сервис → Параметры, вкладка Общие) присутствует параметр Использовать текущую дату компьютера. Если пользователь случайно или намеренно снимает этот флаг и задает конкретную дату, платформа перестает запрашивать актуальное системное время операционной системы. Вместо этого в сеансе принудительно активируется статическая рабочая дата.
Особенности поведения рабочей даты:
Дата по умолчанию помещается именно рабочая дата сеанса, а не системное время.Чтобы вернуть стандартное поведение, пользователю необходимо открыть параметры системы и вернуть флаг Использовать текущую дату компьютера.
Помимо интерактивных настроек, важно исключить ошибки в коде конфигурации. Проанализируем типичный сценарий: если форма документа или списка инициализирует параметры отбора и заполнения реквизитов, необходимо следить за контекстом исполнения и используемыми системными функциями.
В управляемых формах отборы и начальные значения часто устанавливаются в обработчиках ПриСозданииНаСервере и ПриОткрытии. Посмотрим на пример кода установки отборов динамического списка формы:
&НаКлиенте
Процедура УстановитьПараметрыОтбораПользователя()
ЭлементыОтбора = Список.Отбор.Элементы;
ЭлементыОтбора.Очистить();
Если Не ОтборОрганизация.Пустая() Тогда
ЭлементОтбораОрганизация = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораОрганизация.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
ЭлементОтбораОрганизация.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбораОрганизация.Использование = Истина;
ЭлементОтбораОрганизация.ПравоеЗначение = ОтборОрганизация;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОтборОрганизация = Пользователи.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация");
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьПараметрыОтбораПользователя();
КонецПроцедуры
Обратите внимание на различия системных функций работы со временем, которые могут применяться в модулях:
ТекущаяДата() возвращает физическое системное время устройства, на котором исполняется вызов. На клиенте это часы рабочей станции, на сервере — часы сервера приложений. При рассинхронизации системных часов клиента и сервера возникнут скачки дат при переходе между клиентским и серверным контекстом.ТекущаяДатаСеанса() возвращает серверное время с поправкой на часовой пояс текущего сеанса. В многопользовательской среде и клиент-серверной архитектуре для заполнения реквизитов документов рекомендуется применять именно ТекущаяДатаСеанса().Если параметры рабочей даты у пользователей включены, но данные продолжают отображаться некорректно, причина может заключаться в зависании рабочих процессов сервера 1С или кэшировании данных сеансов. В таких случаях требуется комплексная перезагрузка серверных компонентов.
Разберем по шагам регламент сброса серверного окружения:
srvinfo) удалим временные файлы с префиксом snccntx. Это сбросит поврежденные дескрипторы зависших сеансов.Нередко после перезапуска сервера 1С или СУБД пользователи сталкиваются с новой критической ошибкой: «Несоответствие свойства и элемента данных XDTO: свойство kind». Проанализируем причину ее появления.
В управляемом клиенте платформа передает описание интерфейсных структур и состояние метаданных формы между сервером и клиентом через пакеты XDTO. Если на рабочем месте пользователя сохранился старый локальный кэш конфигурации, а сервер приложений перезапустился и обновил структуры контекста, возникает рассинхронизация сериализации. Тонкий клиент ожидает одну схему типов, а сервер возвращает измененный набор свойств.
Для полного устранения этой ошибки выполним следующие действия:
1cv8c.exe и 1cv8.exe на компьютере пользователя.%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8 (удалению подлежат подпапки с длинными буквенно-цифровыми GUID-именами).Своевременный контроль настройки Использовать текущую дату компьютера, корректное использование функции ТекущаяДатаСеанса() в процедурах заполнения и регулярная очистка поврежденного кэша обеспечивают надежную и стабильную работу пользователей без искажения учетных данных.