В процессе работы с программой 1С:Зарплата и управление персоналом, редакция 3.1 пользователи иногда сталкиваются с парадоксальной ситуацией: открывая карточку одного и того же сотрудника, разные люди видят разные данные в поле График работы. При этом кадровые документы (например, Кадровый перевод) введены корректно, кэш очищен, а права доступа у сотрудников идентичны. Давайте подробно разберем, почему возникает такая визуальная рассинхронизация и как привести отображение данных к единому знаменателю.
Проанализируем механизм отображения данных в управляемых формах 1С. Большинство реквизитов в карточке сотрудника, таких как подразделение, должность или график работы, не хранятся непосредственно в справочнике Сотрудники. Программа извлекает их динамически из регистров сведений (например, Кадровая история сотрудников).
Выясним, как именно происходит этот процесс. Когда мы открываем форму, система выполняет запрос типа «Срез последних». Этот запрос всегда привязан к конкретной временной точке. Рассмотрим, что служит этой точкой:
Разберем на примере. Предположим, сотрудник был переведен на новый «Сменный график» с 15-го числа текущего месяца. До этого он работал по графику «Пятидневка».
Решение: Проверьте настройки через Главное меню — Сервис — Параметры. Убедитесь, что переключатель установлен в положение «Использовать текущую дату компьютера» или даты у всех пользователей совпадают.
Рассмотрим еще одну ситуацию, упомянутую в обсуждении. Иногда расхождение возникает из-за специфики работы платформы с транзакциями. Если один пользователь открыл документ Кадровое перемещение, внес изменения, нажал кнопку ОК или Провести и закрыть, но при этом сама карточка сотрудника (из которой, возможно, открывался документ) осталась открытой и не была обновлена, данные могут временно «зависнуть» в памяти сеанса.
Проанализируем алгоритм действий для исключения этой ошибки:
Обновить (команда Еще — Обновить) в списках и карточках, чтобы инициировать повторный запрос к базе данных.В 1С:ЗУП 3.1 существует важная методическая особенность: документ Индивидуальный график имеет безусловный приоритет над графиком, назначенным в кадровом порядке. Если мы видим в карточке один график, а при расчете зарплаты или в табеле — другой, стоит проверить регистр Данные графиков работы сотрудников.
Посмотрим на ситуацию глубже: поле в карточке сотрудника часто берется из регистра кадровой истории. Однако, если на текущий месяц введен Индивидуальный график, он не меняет «основной» график в кадровой истории, но полностью перекрывает его для целей учета времени. Разные пользователи могут видеть разные данные, если один смотрит на «плановые» показатели, а другой — на фактически введенные документы отклонений, если форма была кастомизирована расширениями.
В клиент-серверных вариантах работы (SQL) стоит обратить внимание на синхронизацию времени. Если сервер 1С:Предприятия и сервер баз данных имеют расхождение во времени даже в несколько минут, а документ был введен «только что», запрос СрезПоследних(ТекущаяДата()) может не подхватить запись, время которой формально еще не наступило по мнению сервера приложений.
Также важно помнить о свойстве Дата сеанса. В коде конфигурации получение данных часто завязано на функцию ТекущаяДатаСеанса(). Если пользователи работают в разных часовых поясах через тонкий клиент, их «сегодня» может отличаться, что приведет к разным результатам среза данных в отчетах и формах.
Разберем ситуацию с использованием устаревших версий программы. В релизах ветки 3.1.6 существовали зарегистрированные ошибки, связанные с механизмом RLS (Access Control List). Даже при «одинаковых» правах, ограничения на уровне записей могли работать некорректно. Если один пользователь имеет доступ к истории изменений (архивным записям), а другой ограничен только текущим подразделением, программный код формирования представления сотрудника мог выдавать ошибку и возвращать пустую или первую попавшуюся запись из кэша.
Для исправления подобных технических сбоев в старых редакциях рекомендуется:
1C:Enterprise Server Administration и удаление папок из srvinfo).Если вы программист и вам нужно точно выяснить, какой график система считает актуальным для пользователя на конкретную дату, можно воспользоваться следующим методом обращения к регистру. Рассмотрим пример кода, который поможет отладить ситуацию:
ДатаПроверки = ТекущаяДатаСеанса();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковСрезПоследних.ГрафикРаботы КАК График
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаПроверки, Сотрудник = &Сотрудник) КАК КадроваяИсторияСотрудниковСрезПоследних";
Запрос.УстановитьПараметр("ДатаПроверки", ДатаПроверки);
Запрос.УстановитьПараметр("Сотрудник", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Сообщить("Актуальный график на " + ДатаПроверки + ": " + Выборка.График);
КонецЕсли;
Используя данный подход в консоли запросов под разными пользователями, вы сможете быстро определить, возвращает ли база данных разные значения или проблема кроется исключительно в визуальном отображении формы Справочник.Сотрудники.
Подведем итог. Если в 1С:ЗУП 3.1 наблюдается разница в графиках работы у одного сотрудника под разными учетными записями, в 90% случаев это связано с установленной Рабочей датой в параметрах системы. Остальные 10% приходятся на несинхронизированное время серверов, кэширование динамических списков или специфические ошибки старых релизов платформы и конфигурации.