Параметры сеанса, константы и регистры: где и как задать значение в 1С:Предприятии 8.3
Содержание
Чтобы установить параметр в 1С, сначала определите, какой это параметр. Ключ запуска задают в свойствах базы в окне запуска (поле «Дополнительные параметры запуска»), параметр сеанса — в модуле сеанса в процедуре УстановкаПараметровСеанса, значение константы — в режиме 1С:Предприятие через Все функции → Константы или кодом Константы.Имя.Установить(Значение).
Под словом «параметр» в 1С скрываются пять разных механизмов. У каждого своё место хранения, свой срок жизни и свои права. Ошибка выбора — частая причина того, что значение «не сохраняется» или «сбрасывается после перезапуска». Ниже каждый механизм разобран отдельно, с путями и рабочим кодом для платформы 8.3 в интерфейсе «Такси».
Какой параметр вам нужен: сравнение механизмов
Начните с таблицы. Она экономит время на поиске не в том месте.
| Механизм | Где задают | Сколько живёт значение | Кто меняет |
|---|---|---|---|
| Ключ (параметр) запуска | Окно запуска, ярлык, командная строка | Один запуск клиента | Пользователь, администратор |
| Параметр сеанса | Модуль сеанса, код | До завершения сеанса | Только код |
| Константа | Режим 1С:Предприятие, код | Постоянно, одно значение на базу | Пользователь с правами, код |
| Регистр сведений | Режим 1С:Предприятие, код | Постоянно, много значений по измерениям и датам | Пользователь с правами, код |
| Свойство объекта метаданных | Конфигуратор | До следующего изменения конфигурации | Разработчик |
Короткое правило выбора:
- 🔹 нужно одно значение на всю базу (например, «Использовать склады») — константа;
- 🔹 значение зависит от организации, даты или другого разреза — регистр сведений ;
- 🔹 значение нужно только на время работы пользователя (текущий пользователь, текущая организация для ограничения доступа) — параметр сеанса;
- 🔹 нужно поменять поведение программы при входе (отключить сообщения, сбросить кэш , войти под другим пользователем) — ключ запуска;
- 🔹 нужно поменять длину реквизита, тип, проверку заполнения — свойство метаданных в Конфигураторе.
Ключи запуска и параметры сеанса: как их задать
Это два разных механизма, но их часто путают, потому что оба «включаются» при входе в программу.
Ключи запуска в окне выбора базы
Ключи запуска передаются исполняемому файлу 1cv8.exe. Задать их можно без командной строки:
- Откройте окно запуска 1С и выделите базу в списке.
- Нажмите «Изменить».
- Пройдите мастер до последней страницы.
- Впишите ключи в поле «Дополнительные параметры запуска».
- Нажмите «Готово» и запустите базу.
Ключи, которые чаще всего нужны на практике:
| Ключ | Что делает |
|---|---|
/ClearCache | Очищает клиентский кэш конфигурации перед запуском |
/N"Имя" и /P"Пароль" | Подставляют имя пользователя и пароль |
/DisableStartupMessages | Отключает стартовые сообщения о несоответствии конфигурации |
/C"строка" | Передаёт произвольную строку в программу |
/UC"код" | Код разрешения входа при установленной блокировке сеансов |
Тот же набор работает в ярлыке или bat-файле:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Админ" /P"" /C"РежимОтладки" /ClearCache
Пароль в ярлыке или в поле дополнительных параметров виден любому, кто откроет свойства. Для общих компьютеров так не делайте.
Строку из ключа /C программа читает через глобальное свойство ПараметрЗапуска. Оно доступно на клиенте:
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
Если СтрНайти(ПараметрЗапуска, "РежимОтладки") > 0 Тогда
Сообщить("Запуск в режиме отладки");
КонецЕсли;
КонецПроцедуры
Обработчик ПриНачалеРаботыСистемы пишут в модуле управляемого приложения. В типовых конфигурациях на БСП этот модуль уже занят служебным кодом, поэтому свою проверку лучше вынести в расширение.
Параметры сеанса
Параметр сеанса — это объект конфигурации из ветки Общие → Параметры сеанса. Через интерфейс пользователь его не видит и вручную не меняет. Значение задаёт только код.
Порядок создания:
- В Конфигураторе откройте дерево
Общие → Параметры сеанса. - Добавьте параметр, задайте имя и тип. Допустимы примитивные типы, ссылки и фиксированные коллекции.
- В ролях, которым параметр нужен, выдайте права «Получение» и при необходимости «Установка».
- Откройте модуль сеанса: правой кнопкой по корню конфигурации → «Открыть модуль сеанса».
- Опишите процедуру установки значений.
Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
Если ИменаПараметровСеанса = Неопределено Тогда
// Начало сеанса: ставим то, что нужно сразу
ПараметрыСеанса.ДатаНачалаСеанса = ТекущаяДатаСеанса();
Возврат;
КонецЕсли;
// Обращение к ещё не установленному параметру
Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
Если ИмяПараметра = "ТекущийСклад" Тогда
ПараметрыСеанса.ТекущийСклад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Платформа вызывает эту процедуру дважды по-разному. При старте сеанса в параметр приходит Неопределено. Когда код позже обращается к параметру, у которого ещё нет значения, процедура вызывается повторно, и в массиве приходят имена этих параметров. На этом построена «ленивая» инициализация: тяжёлые значения считаются только тогда, когда реально нужны.
💡 Параметры сеанса часто используют в ограничениях доступа на уровне записей (RLS). Тогда значение должно быть установлено до первого запроса к ограниченной таблице, иначе пользователь получит ошибку прав.
Константы: создание в Конфигураторе и ввод значения
Константа хранит одно значение на всю информационную базу. Типичные примеры — флаг «Использовать несколько организаций», основная валюта, адрес сервиса.
Как создать константу
- В Конфигураторе откройте ветку
Константы. - Добавьте новую, задайте имя, синоним и тип.
- Выполните
Конфигурация → Обновить конфигурацию базы данных(клавиша F7).
Значение константы в Конфигураторе не вводится. Конфигуратор описывает константу, а хранит и меняет значение режим 1С:Предприятие.
Как задать значение без программирования
Если для константы нет своей формы настроек, используйте служебный список:
- Откройте главное меню (кнопка с тремя полосками в левом верхнем углу).
- Перейдите в
Сервис → Параметры. - Включите флажок «Отображать команду “Все функции”».
- В главном меню выберите
Все функции → Константы. - Откройте нужную константу, введите значение и нажмите «Записать и закрыть».
В типовых конфигурациях большинство констант выведено в раздел Администрирование: настройки программы, параметры учёта, функциональность. Там их и меняют, а через «Все функции» — только служебные.
Как задать значение кодом
// Запись
Константы.ОсновнаяВалюта.Установить(Справочники.Валюты.НайтиПоКоду("643"));
// Чтение
Валюта = Константы.ОсновнаяВалюта.Получить();
Если нужно сработать обработчикам формы или подпискам, используйте менеджер значения:
Менеджер = Константы.ИспользоватьСклады.СоздатьМенеджерЗначения();
Менеджер.Значение = Истина;
Менеджер.Записать();
💡 Многие константы в БСП привязаны к функциональным опциям. После смены такой константы интерфейс обновится у пользователя только после перезапуска клиента или вызова ОбновитьИнтерфейс().
Регистры сведений: когда одной константы мало
Если параметр зависит от даты или от разреза (организация, склад, сотрудник), его хранят в регистре сведений. Пример из любой типовой конфигурации — курсы валют: курс зависит от валюты и от даты.
Ручная запись
- Откройте регистр: из раздела программы или через
Все функции → Регистры сведений. - Нажмите «Создать».
- Для периодического регистра укажите период — дату, с которой действует значение.
- Заполните измерения (разрезы) и ресурсы (сами значения).
- Запишите запись.
У периодического регистра новая запись не затирает старую. Она начинает действовать с указанной даты, а для более ранних дат программа берёт предыдущее значение. Поэтому, чтобы «поменять параметр с 1 июля», не правьте старую запись — добавьте новую с периодом 01.07.
Запись кодом: менеджер записи
Один параметр по одному набору измерений удобно писать менеджером записи:
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = НачалоДня(ТекущаяДатаСеанса());
Запись.Валюта = Справочники.Валюты.НайтиПоКоду("840");
Запись.Курс = 92.5;
Запись.Кратность = 1;
Запись.Записать();
Если запись с теми же периодом и измерениями уже есть, Записать() с параметром по умолчанию (Истина) заменит её.
Запись кодом: набор записей с отбором
Когда нужно заменить сразу все значения по одному разрезу, используйте набор записей:
Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Валюта.Установить(Справочники.Валюты.НайтиПоКоду("840"));
Набор.Отбор.Период.Установить(НачалоДня(ТекущаяДатаСеанса()));
НоваяЗапись = Набор.Добавить();
НоваяЗапись.Период = НачалоДня(ТекущаяДатаСеанса());
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоКоду("840");
НоваяЗапись.Курс = 92.5;
НоваяЗапись.Кратность = 1;
Набор.Записать(); // все записи по отбору будут заменены
Набор записей с пустым отбором при записи с замещением удалит все записи регистра. Проверяйте отбор перед Записать().
Прочитать действующее значение на дату проще всего методом ПолучитьПоследнее:
Отбор = Новый Структура("Валюта", Справочники.Валюты.НайтиПоКоду("840"));
Значения = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДатаСеанса(), Отбор);
Курс = Значения.Курс;
Свойства объектов метаданных: как изменить в Конфигураторе
Длина строки, тип реквизита, проверка заполнения, индексирование, полнотекстовый поиск — всё это свойства объектов конфигурации. Их меняют только в Конфигураторе.
Если конфигурация своя или снята с поддержки
- Откройте Конфигуратор и дерево конфигурации (
Конфигурация → Открыть конфигурацию). - Найдите объект, например реквизит справочника.
- Откройте палитру свойств: двойной щелчок или
Alt+Enter. - Измените свойство, например «Длина» или «Проверка заполнения».
- Нажмите F7 — «Обновить конфигурацию базы данных».
Смена типа или длины реквизита ведёт к реструктуризации таблиц. Для этого нужен монопольный доступ: пользователей придётся попросить выйти из базы. Делайте это вне рабочего времени: сеансы пользователей при этом прервутся.
Перед изменением свойств в рабочей базе сделайте выгрузку Администрирование → Выгрузить информационную базу в Конфигураторе.
Если конфигурация типовая и на поддержке
Если объекты на замке, свойства недоступны для правки. Есть два пути.
| Способ | Когда подходит | Цена решения |
|---|---|---|
| Расширение конфигурации | Нужно добавить реквизит, форму, обработчик, переопределить поведение | Обновления типовой ставятся без ручного сравнения |
| Включение возможности изменения | Нужно поменять свойства, которые расширением не меняются (длина, тип стандартных реквизитов) | Каждое обновление — через сравнение и объединение |
Включают изменения так: Конфигурация → Поддержка → Настройка поддержки → Включить возможность изменения. После этого для нужных объектов выставляют правило «Объект поставщика редактируется с сохранением поддержки».
💡 Расширения появились в платформе 8.3.6. Начинайте с них. Снимать типовую с поддержки ради одного свойства — решение, которое потом дорого обходится на каждом обновлении.
Программная установка: настройки, функциональные опции, привилегированный режим
Кроме констант и регистров, у разработчика есть ещё несколько способов сохранить параметр.
Хранилище общих настроек
Для пользовательских параметров (последний выбранный склад, вид отчёта, флажок в обработке) используйте хранилище настроек. Значение сохранится для текущего пользователя:
ХранилищеОбщихНастроек.Сохранить("МояОбработка", "ПоследнийСклад", Склад);
Склад = ХранилищеОбщихНастроек.Загрузить("МояОбработка", "ПоследнийСклад");
Если настройка ещё не сохранялась, Загрузить вернёт Неопределено. Проверяйте это перед использованием.
Параметры функциональных опций
Функциональная опция включает и выключает части интерфейса по значению константы или регистра. Если опция параметризована (например, по организации), параметр для интерфейса задают методом УстановитьПараметрыФункциональныхОпцийИнтерфейса. Сама опция параметром не «устанавливается» — меняют константу или запись регистра, которая её хранит.
Привилегированный режим
Если у роли пользователя нет прав на запись константы или регистра, а запись нужна служебному коду, на сервере включают привилегированный режим:
УстановитьПривилегированныйРежим(Истина);
Константы.ДатаПоследнейСинхронизации.Установить(ТекущаяДатаСеанса());
УстановитьПривилегированныйРежим(Ложь);
Привилегированный режим работает только на сервере и отключает проверку прав целиком. Включайте его на минимальном участке кода и не оборачивайте в него действия, которые выбирает сам пользователь.
Почему параметр не устанавливается: диагностика
Чаще всего проблема не в коде, а в выборе места или в правах. Пройдите по симптомам.
Пара проверок, которые помогают в спорных случаях:
- 🔍 Чтобы понять, какое значение реально лежит в константе, откройте её через
Все функции → Константыпод администратором. Если там верное значение, а у пользователя другое — проблема в правах или в кэше формы. - 🔍 Для регистра откройте список записей и отсортируйте по периоду. Дубли по одной дате и одним измерениям невозможны, но «лишняя» запись с более поздней датой часто объясняет «неправильное» значение.
- 🔍 Для параметра сеанса поставьте точку останова в
УстановкаПараметровСеансаи запустите отладку. Сразу видно, вызывается ли процедура и с каким массивом имён.
Перезапуск клиента с /ClearCache касается только этого компьютера. Если нужно сбросить кэш у всех, попросите пользователей завершить работу и войти заново — иначе их сеансы будут работать по старому описанию конфигурации.