При работе с типовыми конфигурациями 1С часто возникает вопрос: где именно система хранит значение «рабочей даты» и можно ли ею управлять программно? В этой статье мы подробно разберем механизм работы с рабочей датой, рассмотрим, как она настраивается пользователем и как к ней обращаться в программном коде.
Важно понимать, что «рабочая дата» в платформе 1С — это не конкретная ячейка в базе данных или поле в таблице, которое можно найти прямым запросом к SQL-базе. Это динамическое значение, которое используется системой для подстановки в новые документы. Если рабочая дата не задана пользователем, система автоматически использует текущую дату компьютера или сервера.
С технической точки зрения платформа работает с концепцией РабочаяДата на уровне текущего сеанса пользователя. В момент запуска программы система считывает настройки из профиля пользователя и устанавливает это значение в память процесса.
Если вам или пользователям программы необходимо изменить рабочую дату для оперативной работы, это можно сделать через стандартные настройки интерфейса:
После этого все новые документы, создаваемые пользователем, будут по умолчанию предлагать выбранную дату.
Разработчикам важно использовать унифицированные методы БСП (Библиотеки стандартных подсистем), чтобы код оставался рабочим после обновлений конфигурации. Давайте рассмотрим, как правильно работать с датой в типовых решениях, таких как 1С:Бухгалтерия 3.0 и 1С:ЗУП 3.1.
Для получения актуальной рабочей даты в 1С:Бухгалтерия 3.0 мы используем функционал ОбщегоНазначенияБП. Рассмотрим пример получения значения:
// Получение текущей рабочей даты
РабочаяДата = ОбщегоНазначенияБП.ПолучитьРабочуюДату();
Если вам требуется программно установить рабочую дату для пользователя, воспользуйтесь вызовом серверных процедур:
// Установка рабочей даты
ОбщегоНазначенияБПВызовСервера.УстановитьЗначениеПоУмолчанию("РабочаяДата", ЗначениеРабочейДатыДляСохранения);
В конфигурации 1С:Зарплата и Управление Персоналом механизмы унифицированы через общий модуль ОбщегоНазначения. Рекомендуется использовать методы, которые автоматически проверяют наличие пользовательской настройки:
// Рекомендуемый способ получения даты в ЗУП 3.1
ДатаСеанса = ОбщегоНазначения.ТекущаяДатаПользователя();
Использование метода ТекущаяДатаПользователя является наиболее предпочтительным, так как он содержит внутреннюю логику: если рабочая дата пользователем не установлена, система вернет текущую дату сеанса (дату компьютера или сервера), предотвращая ошибки пустых значений.
Часто возникает соблазн поискать рабочую дату в регистрах или константах. Однако мы настоятельно рекомендуем отказаться от попыток прямого редактирования данных в хранилищах настроек. Это связано с тем, что:
ХранилищеОбщихНастроек является внутренним объектом платформы, структура которого может меняться от версии к версии.Используя методы ОбщегоНазначения, вы обеспечиваете стабильность своего кода. Если вы столкнулись с необходимостью изменения даты, всегда отдавайте предпочтение стандартным методам УстановитьЗначениеПоУмолчанию или встроенным настройкам пользователя.