Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) в модуле сеанса запускается с непонятно откуда приходящим параметром ИменаПараметровСеанса. Вопрос: как этот параметр туда попадает и от чего зависит состав имён параметров, которые будут установлены в данной процедуре? Как добавить в этот алгоритм имя своего параметра сеанса?
---
Нет. Процедура установки параметров запускается и при старте системы, и при обращении к неинициализированным параметрам сеанса.

Проще говоря, когда обратитесь к своему параметру сеанса в первый раз (т.е. попытаетесь получить его значение), тогда и сработает процедура "УстановкаПараметровСеанса", при этом ее параметр "ИменаПараметровСеанса" будет содержать имя Вашего параметра сеанса.
---
Обращение к параметру это не только:
НужныйПараметр = ПараметрыСеанса.НужныйПараметр;
а так же и
ПараметрыСеанса.НужныйПараметр = "НужныйПараметр";

Причем и во втором случае, если этот параметр сеанса еще не инициализирован, то будет вначале вызов процедуры УстановкаПараметровСеанса(ИменаПараметровСеанса) из модуля ПараметрыСеанса, где этот параметр должен быть инициализирован, и только после этого будет новое присваивание ему. Иначе будет ошибка обращения к неинициализированному параметру.
---
Какая-то путаница. В модуле сеанса, в обработчике "УстановкаПараметровСеанса" не следует пытаться обращаться к своему параметру сеанса. Этот обработчик служит для установки значения. Если Вы не устанавливаете значение, то в результате получаете ошибку "Попытка получения неинициализированного значения параметра сеанса". Если Вы прежде, чем установить, читаете его значение, Вы получаете ту же ошибку.

Представьте, что параметр сеанса - это очередная глобальная переменная. Пока Вы ей ничего не присвоите, она будет содержать неопределенное значение. Для обычных переменных Вы сначала задаете исходное значение, а потом уже используете это значение в своем алгоритме:

```1c
    Перем А;
    А = 5; // инициализация значения
    Б = А + 6;
    В = А * Б;
```
В отличии от переменных, параметры сеанса необязательно инициализировать сразу при запуске системы. Вы можете обращаться к ней сразу, как будто бы она уже инициализирована:

```1c
    Б = ПараметрыСеанса.А + 6;
    В = ПараметрыСеанса.А * Б;
```
А вот блок инициализации уже должен быть расположен в модуле сеанса.

```1c
    Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
    Если ИменаПараметровСеанса <> Неопределено И ИменаПараметровСеанса.Найти("А") <> Неопределено Тогда
    ПараметрыСеанса.А = 5;
    КонецЕсли;
    КонецПроцедуры
```
И сработает этот блок при самом первом обращении к параметру сеанса "А", т.е. перед выполнением первой строчки (расчет "Б"). Если вдруг мы вновь запустим расчет "Б" и "В", инициализация параметра сеанса выполняться уже не будет - он инициализирован был в первый раз.
---
УстановкаПараметровСеанса(ИменаПараметровСеанса) обработчик события первого обращения к параметру сеанса.
Первый раз он вызывается при запуске приложения, практически это первый доступный код при запуске(не считая компиляции глобальных модулей). ИменаПараметровСеанса при этом пустые. Можно безусловно установить какие-либо параметры сеанса.
Далее этот обработчик вызывается при каждом первом обращении к параметру сеанса, при этом в ИменаПараметровСеанса передается имя параметра сеанса, который требуется инициализировать.
Вызывать эту процедуру не имеет смысла. Она сама вызывается. А вот инициализировать нужно именно в этом обработчике. Точнее место инициализации может быть где угодно при контексте Сервер, но это место должно вызываться именно в данной процедуре.
Обычно для этого проверяется ИменаПараметровСеанса и если оно соответствует нужному имени параметра сеанса, то производится его инициализация. В любом другом месте прямая инициализация невозможна
---
Как сделать, чтобы было обращение к моему параметру сеанса? При отработке кода модуля сеанса ни к каким параметрам дальнейшие процедуры не обращаются, а имена параметром сеанса не понятно от куда появляются после окончания всех процедур при повторном запуске процедур модуля
---
Обращение к параметру это не только:
НужныйПараметр = ПараметрыСеанса.НужныйПараметр;
а так же и
ПараметрыСеанса.НужныйПараметр = "НужныйПараметр";

Причем и во втором случае, если этот параметр сеанса еще не инициализирован, то будет вначале вызов процедуры УстановкаПараметровСеанса(ИменаПараметровСеанса) из модуля ПараметрыСеанса, где этот параметр должен быть инициализирован, и только после этого будет новое присваивание ему. Иначе будет ошибка обращения к неинициализированному параметру.
---
Причем и во втором случае, если этот параметр сеанса еще не инициализирован, то будет вначале вызов процедуры УстановкаПараметровСеанса
Прошу прощения, но откуда у Вас эта информация? В документации к платформе 8.3.14 есть только такой абзац:
До инициализации значение параметр сеанса неопределено. При попытке чтения такого параметра сначала вызывается обработчик события УстановкаПараметровСеанса(). Если после вызова состояние параметра остается неопределенным, то вызывается исключение.
Речь только чтении, не о записи.
---
обращение через точку это тоже чтение, а уже потом все остальное.
---
Я же про конкретно Ваш пример говорю:

```1c
    ПараметрыСеанса.НужныйПараметр = "НужныйПараметр";
```
Такая инструкция не инициирует вызов обработчика события "УстановкаПараметровСеанса".
---
действительно, погорячился. В этом случае обращения не будет.
---
http://forum.infostart.ru/forum29/topic175670/message2094912/#message2094912 Если используется БСП
---
Не работает так. Попробовал определить нужный мне ПараметрСеанса в модуле сеанса перед началом процедур установки параметров. Выдаёт ошибку: Попытка получения неинициализированного значения параметра сеанса.
Так где они всё таки инциализируются, в каком месте и в какой момент?
---
Это работает именно так.
Параметр сеанса инициализируется при первом обращении к нему.
---
Так в этом и проблема - к моему параметру сеанса нет обращений при запуске системы, после запуска обращаться уже поздно, т.к. параметры сеанса устанавливаются перед запуском(5)
---
Нет. Процедура установки параметров запускается и при старте системы, и при обращении к неинициализированным параметрам сеанса.

Проще говоря, когда обратитесь к своему параметру сеанса в первый раз (т.е. попытаетесь получить его значение), тогда и сработает процедура "УстановкаПараметровСеанса", при этом ее параметр "ИменаПараметровСеанса" будет содержать имя Вашего параметра сеанса.
---
Когда я пытаюсь обратиться к нему в первый раз я получаю ошибку "Попытка получения неинициализированного значения параметра сеанса". Это если в модуле сеанса обращаюсь, а если после запуска системы, то значение праметра сеанса Ложь, потому что его значение не было установлен при запуске системы, не был запущен обработчик установки для данного параметра сеанса
---
Какая-то путаница. В модуле сеанса, в обработчике "УстановкаПараметровСеанса" не следует пытаться обращаться к своему параметру сеанса. Этот обработчик служит для установки значения. Если Вы не устанавливаете значение, то в результате получаете ошибку "Попытка получения неинициализированного значения параметра сеанса". Если Вы прежде, чем установить, читаете его значение, Вы получаете ту же ошибку.

Представьте, что параметр сеанса - это очередная глобальная переменная. Пока Вы ей ничего не присвоите, она будет содержать неопределенное значение. Для обычных переменных Вы сначала задаете исходное значение, а потом уже используете это значение в своем алгоритме:

```1c
    Перем А;
    А = 5; // инициализация значения
    Б = А + 6;
    В = А * Б;
```
В отличии от переменных, параметры сеанса необязательно инициализировать сразу при запуске системы. Вы можете обращаться к ней сразу, как будто бы она уже инициализирована:

```1c
    Б = ПараметрыСеанса.А + 6;
    В = ПараметрыСеанса.А * Б;
```
А вот блок инициализации уже должен быть расположен в модуле сеанса.

```1c
    Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
    Если ИменаПараметровСеанса <> Неопределено И ИменаПараметровСеанса.Найти("А") <> Неопределено Тогда
    ПараметрыСеанса.А = 5;
    КонецЕсли;
    КонецПроцедуры
```
И сработает этот блок при самом первом обращении к параметру сеанса "А", т.е. перед выполнением первой строчки (расчет "Б"). Если вдруг мы вновь запустим расчет "Б" и "В", инициализация параметра сеанса выполняться уже не будет - он инициализирован был в первый раз.
---
Спасибо, уже разобрался. Но вопрос возник потому что в типовой демо базе этот параметр сеанса инициализировался и заполнялся сразу при старте системы, а в аналогичной, но сильно допиленной конфе при тех же настройках такго параметра сенса вообще не приходило в процедуру заполнения при старте. Хотел исправить