Готовишься к экзамену?
Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.
Вы дорабатываете автозаполнение документа «Ведомость в кассу» и в коде при нажатии «Заполнить» читаете параметр сеанса (например, «ОрганизацияПоУмолчанию» или «КассаПоУмолчанию»), который еще не был задан. Что произойдет при обращении к такому неинициализированному параметру сеанса в 1С?
Система выполнит обработчик «УстановкаПараметровСеанса», а если значение так и не задано - подставит значение по умолчанию для типа
Неправильно: при чтении неинициализированного параметра действительно сначала срабатывает «УстановкаПараметровСеанса», но если после этого параметр останется неопределенным, платформа не подставляет «типовое значение по умолчанию», а завершает обращение ошибкой.
Такого не бывает: параметры сеанса всегда уже инициализированы
Неправильно: параметр сеанса может оставаться в состоянии «Неопределено/не установлено» до первой попытки обращения или до явной установки в модуле сеанса/привилегированном коде.
Сразу возникнет исключение без каких-либо дополнительных действий
Неправильно: прямое чтение неинициализированного параметра не обязано мгновенно падать - перед этим платформа пытается дать конфигурации шанс и вызывает обработчик установки параметров сеанса.
Сначала выполнится «УстановкаПараметровСеанса», и если параметр так и не будет установлен - возникнет исключение
Правильно: до инициализации параметр сеанса имеет неопределенное значение; при попытке чтения платформа вызывает «УстановкаПараметровСеанса(ТребуемыеПараметры)», и если после отработки параметр остается неинициализированным, генерируется исключение.
Сначала выполнится «УстановкаПараметровСеанса», и если значение не задано - параметр останется равным «Неопределено» без ошибок
Неправильно: оставлять параметр неопределенным после попытки чтения нельзя - если он не установлен обработчиком, платформа сообщает об ошибке (исключение), чтобы не допустить «тихого» использования пустого значения.
Пояснение
Расширенная подсказка (с практикой для «Ведомости в кассу»):
1) Как ведут себя параметры сеанса
- Параметр сеанса - это серверное значение «на текущую сессию», которое часто используют как кэш или как «контекст по умолчанию» (организация, подразделение, интерфейсные настройки, выбранная касса и т.п.).
- Пока параметр не установлен программно, он считается неинициализированным (условно: «Неопределено/не установлено»).
- В момент, когда код впервые пытается получить его значение, платформа автоматически вызывает обработчик «УстановкаПараметровСеанса(ТребуемыеПараметры)», чтобы конфигурация могла заполнить нужные параметры.
- Если после выполнения обработчика параметр так и не получил значение, платформа генерирует исключение - это защищает от ситуации, когда логика продолжит работу с «пустым» контекстом.
2) Почему это важно именно для автоматического заполнения «Ведомости в кассу»
- Пользовательский сценарий: бухгалтер открывает «Ведомость в кассу», выбирает организацию/кассу/месяц и нажимает «Заполнить» - программа подбирает сотрудников и суммы к выплате.
- В доработках часто делают «умные значения по умолчанию»: например, автоматически подставляют кассу по рабочему месту кассира или организацию по последнему выбору пользователя. Самый простой способ - хранить такие значения в параметрах сеанса.
- Типовая ошибка доработки: в модуле формы/команды «Заполнить» читают ПараметрыСеанса.КассаПоУмолчанию, но нигде не инициализируют его. Тогда при первом обращении будет вызван «УстановкаПараметровСеанса», и если там (или в модуле сеанса) не задано значение - заполнение ведомости прервется исключением.
3) Мини-практика (как сделать устойчиво)
- В «УстановкаПараметровСеанса» проверяйте массив ТребуемыеПараметры и устанавливайте только те параметры, которые реально запросили.
- Для автозаполнения ведомости полезно инициализировать параметры «ОрганизацияПоУмолчанию», «МестоВыплаты/КассаПоУмолчанию», а также (при необходимости) признак детализации мест выплат.
- Если корректного значения определить нельзя (например, у пользователя нет привязки к кассе), вместо того чтобы оставлять параметр пустым, лучше установить осмысленное значение (или показать пользователю понятное сообщение и предложить выбрать кассу вручную до нажатия «Заполнить»).
4) Напоминание по типовым причинам, почему ведомость «не заполняется»
- Даже при исправной инициализации параметров сеанса автоподбор сотрудников зависит от настроек выплат: если у сотрудника «место выплаты» не соответствует типу ведомости (касса vs банк), он не попадет в подбор; аналогично влияет выбранная организация и реквизиты выплаты.