Параметры сеанса, константы и регистры: где и как задать значение в 1С:Предприятии 8.3

· 10 мин

Содержание

Чтобы установить параметр в 1С, сначала определите, какой это параметр. Ключ запуска задают в свойствах базы в окне запуска (поле «Дополнительные параметры запуска»), параметр сеанса — в модуле сеанса в процедуре УстановкаПараметровСеанса, значение константы — в режиме 1С:Предприятие через Все функции → Константы или кодом Константы.Имя.Установить(Значение).

Под словом «параметр» в 1С скрываются пять разных механизмов. У каждого своё место хранения, свой срок жизни и свои права. Ошибка выбора — частая причина того, что значение «не сохраняется» или «сбрасывается после перезапуска». Ниже каждый механизм разобран отдельно, с путями и рабочим кодом для платформы 8.3 в интерфейсе «Такси».

Какой параметр вам нужен: сравнение механизмов

Начните с таблицы. Она экономит время на поиске не в том месте.

МеханизмГде задаютСколько живёт значениеКто меняет
Ключ (параметр) запускаОкно запуска, ярлык, командная строкаОдин запуск клиентаПользователь, администратор
Параметр сеансаМодуль сеанса, кодДо завершения сеансаТолько код
КонстантаРежим 1С:Предприятие, кодПостоянно, одно значение на базуПользователь с правами, код
Регистр сведенийРежим 1С:Предприятие, кодПостоянно, много значений по измерениям и датамПользователь с правами, код
Свойство объекта метаданныхКонфигураторДо следующего изменения конфигурацииРазработчик

Короткое правило выбора:

  • 🔹 нужно одно значение на всю базу (например, «Использовать склады») — константа;
  • 🔹 значение зависит от организации, даты или другого разреза — регистр сведений ;
  • 🔹 значение нужно только на время работы пользователя (текущий пользователь, текущая организация для ограничения доступа) — параметр сеанса;
  • 🔹 нужно поменять поведение программы при входе (отключить сообщения, сбросить кэш , войти под другим пользователем) — ключ запуска;
  • 🔹 нужно поменять длину реквизита, тип, проверку заполнения — свойство метаданных в Конфигураторе.

Ключи запуска и параметры сеанса: как их задать

Это два разных механизма, но их часто путают, потому что оба «включаются» при входе в программу.

Ключи запуска в окне выбора базы

Ключи запуска передаются исполняемому файлу 1cv8.exe. Задать их можно без командной строки:

  1. Откройте окно запуска 1С и выделите базу в списке.
  2. Нажмите «Изменить».
  3. Пройдите мастер до последней страницы.
  4. Впишите ключи в поле «Дополнительные параметры запуска».
  5. Нажмите «Готово» и запустите базу.

Ключи, которые чаще всего нужны на практике:

КлючЧто делает
/ClearCacheОчищает клиентский кэш конфигурации перед запуском
/N"Имя" и /P"Пароль"Подставляют имя пользователя и пароль
/DisableStartupMessagesОтключает стартовые сообщения о несоответствии конфигурации
/C"строка"Передаёт произвольную строку в программу
/UC"код"Код разрешения входа при установленной блокировке сеансов

Тот же набор работает в ярлыке или bat-файле:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Админ" /P"" /C"РежимОтладки" /ClearCache

Пароль в ярлыке или в поле дополнительных параметров виден любому, кто откроет свойства. Для общих компьютеров так не делайте.

Строку из ключа /C программа читает через глобальное свойство ПараметрЗапуска. Оно доступно на клиенте:

&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
    Если СтрНайти(ПараметрЗапуска, "РежимОтладки") > 0 Тогда
        Сообщить("Запуск в режиме отладки");
    КонецЕсли;
КонецПроцедуры

Обработчик ПриНачалеРаботыСистемы пишут в модуле управляемого приложения. В типовых конфигурациях на БСП этот модуль уже занят служебным кодом, поэтому свою проверку лучше вынести в расширение.

Параметры сеанса

Параметр сеанса — это объект конфигурации из ветки Общие → Параметры сеанса. Через интерфейс пользователь его не видит и вручную не меняет. Значение задаёт только код.

Порядок создания:

  1. В Конфигураторе откройте дерево Общие → Параметры сеанса.
  2. Добавьте параметр, задайте имя и тип. Допустимы примитивные типы, ссылки и фиксированные коллекции.
  3. В ролях, которым параметр нужен, выдайте права «Получение» и при необходимости «Установка».
  4. Откройте модуль сеанса: правой кнопкой по корню конфигурации → «Открыть модуль сеанса».
  5. Опишите процедуру установки значений.
Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)

    Если ИменаПараметровСеанса = Неопределено Тогда
        // Начало сеанса: ставим то, что нужно сразу
        ПараметрыСеанса.ДатаНачалаСеанса = ТекущаяДатаСеанса();
        Возврат;
    КонецЕсли;

    // Обращение к ещё не установленному параметру
    Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
        Если ИмяПараметра = "ТекущийСклад" Тогда
            ПараметрыСеанса.ТекущийСклад = Справочники.Склады.ПустаяСсылка();
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Платформа вызывает эту процедуру дважды по-разному. При старте сеанса в параметр приходит Неопределено. Когда код позже обращается к параметру, у которого ещё нет значения, процедура вызывается повторно, и в массиве приходят имена этих параметров. На этом построена «ленивая» инициализация: тяжёлые значения считаются только тогда, когда реально нужны.

💡 Параметры сеанса часто используют в ограничениях доступа на уровне записей (RLS). Тогда значение должно быть установлено до первого запроса к ограниченной таблице, иначе пользователь получит ошибку прав.

Константы: создание в Конфигураторе и ввод значения

Константа хранит одно значение на всю информационную базу. Типичные примеры — флаг «Использовать несколько организаций», основная валюта, адрес сервиса.

Как создать константу

  1. В Конфигураторе откройте ветку Константы.
  2. Добавьте новую, задайте имя, синоним и тип.
  3. Выполните Конфигурация → Обновить конфигурацию базы данных (клавиша F7).

Значение константы в Конфигураторе не вводится. Конфигуратор описывает константу, а хранит и меняет значение режим 1С:Предприятие.

Как задать значение без программирования

Если для константы нет своей формы настроек, используйте служебный список:

  1. Откройте главное меню (кнопка с тремя полосками в левом верхнем углу).
  2. Перейдите в Сервис → Параметры.
  3. Включите флажок «Отображать команду “Все функции”».
  4. В главном меню выберите Все функции → Константы.
  5. Откройте нужную константу, введите значение и нажмите «Записать и закрыть».

В типовых конфигурациях большинство констант выведено в раздел Администрирование: настройки программы, параметры учёта, функциональность. Там их и меняют, а через «Все функции» — только служебные.

Как задать значение кодом

// Запись
Константы.ОсновнаяВалюта.Установить(Справочники.Валюты.НайтиПоКоду("643"));

// Чтение
Валюта = Константы.ОсновнаяВалюта.Получить();

Если нужно сработать обработчикам формы или подпискам, используйте менеджер значения:

Менеджер = Константы.ИспользоватьСклады.СоздатьМенеджерЗначения();
Менеджер.Значение = Истина;
Менеджер.Записать();

💡 Многие константы в БСП привязаны к функциональным опциям. После смены такой константы интерфейс обновится у пользователя только после перезапуска клиента или вызова ОбновитьИнтерфейс().

Регистры сведений: когда одной константы мало

Если параметр зависит от даты или от разреза (организация, склад, сотрудник), его хранят в регистре сведений. Пример из любой типовой конфигурации — курсы валют: курс зависит от валюты и от даты.

Ручная запись

  1. Откройте регистр: из раздела программы или через Все функции → Регистры сведений.
  2. Нажмите «Создать».
  3. Для периодического регистра укажите период — дату, с которой действует значение.
  4. Заполните измерения (разрезы) и ресурсы (сами значения).
  5. Запишите запись.

У периодического регистра новая запись не затирает старую. Она начинает действовать с указанной даты, а для более ранних дат программа берёт предыдущее значение. Поэтому, чтобы «поменять параметр с 1 июля», не правьте старую запись — добавьте новую с периодом 01.07.

Запись кодом: менеджер записи

Один параметр по одному набору измерений удобно писать менеджером записи:

Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = НачалоДня(ТекущаяДатаСеанса());
Запись.Валюта = Справочники.Валюты.НайтиПоКоду("840");
Запись.Курс = 92.5;
Запись.Кратность = 1;
Запись.Записать();

Если запись с теми же периодом и измерениями уже есть, Записать() с параметром по умолчанию (Истина) заменит её.

Запись кодом: набор записей с отбором

Когда нужно заменить сразу все значения по одному разрезу, используйте набор записей:

Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Валюта.Установить(Справочники.Валюты.НайтиПоКоду("840"));
Набор.Отбор.Период.Установить(НачалоДня(ТекущаяДатаСеанса()));

НоваяЗапись = Набор.Добавить();
НоваяЗапись.Период = НачалоДня(ТекущаяДатаСеанса());
НоваяЗапись.Валюта = Справочники.Валюты.НайтиПоКоду("840");
НоваяЗапись.Курс = 92.5;
НоваяЗапись.Кратность = 1;

Набор.Записать(); // все записи по отбору будут заменены

Набор записей с пустым отбором при записи с замещением удалит все записи регистра. Проверяйте отбор перед Записать().

Прочитать действующее значение на дату проще всего методом ПолучитьПоследнее:

Отбор = Новый Структура("Валюта", Справочники.Валюты.НайтиПоКоду("840"));
Значения = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДатаСеанса(), Отбор);
Курс = Значения.Курс;

Свойства объектов метаданных: как изменить в Конфигураторе

Длина строки, тип реквизита, проверка заполнения, индексирование, полнотекстовый поиск — всё это свойства объектов конфигурации. Их меняют только в Конфигураторе.

Если конфигурация своя или снята с поддержки

  1. Откройте Конфигуратор и дерево конфигурации (Конфигурация → Открыть конфигурацию).
  2. Найдите объект, например реквизит справочника.
  3. Откройте палитру свойств: двойной щелчок или Alt+Enter.
  4. Измените свойство, например «Длина» или «Проверка заполнения».
  5. Нажмите F7 — «Обновить конфигурацию базы данных».

Смена типа или длины реквизита ведёт к реструктуризации таблиц. Для этого нужен монопольный доступ: пользователей придётся попросить выйти из базы. Делайте это вне рабочего времени: сеансы пользователей при этом прервутся.

Перед изменением свойств в рабочей базе сделайте выгрузку Администрирование → Выгрузить информационную базу в Конфигураторе.

Если конфигурация типовая и на поддержке

Если объекты на замке, свойства недоступны для правки. Есть два пути.

СпособКогда подходитЦена решения
Расширение конфигурацииНужно добавить реквизит, форму, обработчик, переопределить поведениеОбновления типовой ставятся без ручного сравнения
Включение возможности измененияНужно поменять свойства, которые расширением не меняются (длина, тип стандартных реквизитов)Каждое обновление — через сравнение и объединение

Включают изменения так: Конфигурация → Поддержка → Настройка поддержки → Включить возможность изменения. После этого для нужных объектов выставляют правило «Объект поставщика редактируется с сохранением поддержки».

💡 Расширения появились в платформе 8.3.6. Начинайте с них. Снимать типовую с поддержки ради одного свойства — решение, которое потом дорого обходится на каждом обновлении.

Программная установка: настройки, функциональные опции, привилегированный режим

Кроме констант и регистров, у разработчика есть ещё несколько способов сохранить параметр.

Хранилище общих настроек

Для пользовательских параметров (последний выбранный склад, вид отчёта, флажок в обработке) используйте хранилище настроек. Значение сохранится для текущего пользователя:

ХранилищеОбщихНастроек.Сохранить("МояОбработка", "ПоследнийСклад", Склад);

Склад = ХранилищеОбщихНастроек.Загрузить("МояОбработка", "ПоследнийСклад");

Если настройка ещё не сохранялась, Загрузить вернёт Неопределено. Проверяйте это перед использованием.

Параметры функциональных опций

Функциональная опция включает и выключает части интерфейса по значению константы или регистра. Если опция параметризована (например, по организации), параметр для интерфейса задают методом УстановитьПараметрыФункциональныхОпцийИнтерфейса. Сама опция параметром не «устанавливается» — меняют константу или запись регистра, которая её хранит.

Привилегированный режим

Если у роли пользователя нет прав на запись константы или регистра, а запись нужна служебному коду, на сервере включают привилегированный режим:

УстановитьПривилегированныйРежим(Истина);
Константы.ДатаПоследнейСинхронизации.Установить(ТекущаяДатаСеанса());
УстановитьПривилегированныйРежим(Ложь);

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

Почему параметр не устанавливается: диагностика

Чаще всего проблема не в коде, а в выборе места или в правах. Пройдите по симптомам.

Диагностика: выберите симптом

Пара проверок, которые помогают в спорных случаях:

  • 🔍 Чтобы понять, какое значение реально лежит в константе, откройте её через Все функции → Константы под администратором. Если там верное значение, а у пользователя другое — проблема в правах или в кэше формы.
  • 🔍 Для регистра откройте список записей и отсортируйте по периоду. Дубли по одной дате и одним измерениям невозможны, но «лишняя» запись с более поздней датой часто объясняет «неправильное» значение.
  • 🔍 Для параметра сеанса поставьте точку останова в УстановкаПараметровСеанса и запустите отладку. Сразу видно, вызывается ли процедура и с каким массивом имён.

Перезапуск клиента с /ClearCache касается только этого компьютера. Если нужно сбросить кэш у всех, попросите пользователей завершить работу и войти заново — иначе их сеансы будут работать по старому описанию конфигурации.

Частые вопросы

Можно ли записать значение в параметр сеанса из формы пользователя?
Только через серверный вызов и при наличии у роли права «Установка». Обычно так не делают: параметры сеанса задают служебным кодом.
Сохраняется ли параметр сеанса после выхода из программы?
Нет. Он живёт, пока жив сеанс. Для хранения между сеансами используйте константу, регистр сведений или хранилище настроек.
Чем константа отличается от непериодического регистра сведений?
Константа хранит одно значение на базу. Регистр хранит много значений, разложенных по измерениям, например своё значение для каждой организации.
Можно ли установить значение константы через расширение?
Да. Код в расширении работает с константами основной конфигурации так же, как основной код, с учётом прав и безопасного режима расширения.
Где хранятся параметры из поля «Дополнительные параметры запуска»?
В списке информационных баз пользователя на конкретном компьютере. На другом компьютере их нужно задать заново.