Изменение значения константы в 1С 8.3

· 9 мин

Содержание

Чаще всего значение константы в 1С 8.3 ищут в Конфигураторе — и не находят. Там задаётся только структура: имя, тип, длина. Само значение хранится в базе и меняется в режиме «Предприятие».

Поменять константу в 1С 8 можно тремя путями: вручную через меню Все функции, через форму настроек конфигурации или программно — вызовом Установить(). Ниже разберём каждый способ, права, которые для этого нужны, и причины, по которым изменить значение константы не получается.

Если нужно быстро выбрать способ — начните с подсказки:

Как вам удобнее поменять константу?

Где хранится значение и почему его нет в Конфигураторе

Константа в 1С — это объект метаданных, который хранит одно значение на всю базу. Не таблицу, как справочник, а именно одно: ставку НДС по умолчанию, основную валюту, префикс нумерации документов, название организации в однофирменной базе.

В Конфигураторе вы видите константу в ветке Общие → Константы, но её значения там нет. Конфигуратор описывает, какой у константы тип и как она называется. Значение живёт в базе данных и доступно только в режиме «Предприятие».

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

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

Как изменить константу через «Все функции»

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

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

Изменение применяется сразу, перезапуск базы не требуется.

Если список констант длинный, воспользуйтесь строкой фильтра над деревом «Все функции» — наберите часть имени, и список сократится.

Для входа через «Все функции» и правки значений нужны соответствующие права (обычно профиль «Администратор» или «Полные права»). Обычному пользователю эта ветка часто недоступна.

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

Интерфейс «Такси» (платформа 8.3) показывает дерево «Все функции» в отдельном окне. Если вы работаете в тонком клиенте через браузер, окно открывается там же; порядок действий тот же.

Константы в формах настроек конфигураций

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

Путь зависит от конфигурации, но раздел верхнего уровня стабилен:

КонфигурацияГде искать константы-настройки
Бухгалтерия 3.0раздел Главное (налоги и отчёты, функциональность, организации) и Администрирование
ЗУП 3.1раздел Настройка и Администрирование
Управление торговлей 11раздел НСИ и администрирование → Администрирование

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

Когда не знаете, в какой именно форме «спрятана» нужная настройка, помогает общий поиск: в конфигурациях на БСП есть строка поиска по разделам и командам (значок лупы в правом верхнем углу). Наберите часть названия настройки — платформа подскажет, в каком разделе её открыть. Если же настройку задумано менять только через «Все функции», в формах она не появится вовсе — тогда идите сразу в ветку Константы.

Как поменять константу программно в режиме «Предприятие»

Когда правок много или значение зависит от условия, пишут код. Выполняют его во внешней обработке с модулем, запущенной в «Предприятии».

Записать одно значение:

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

Прочитать текущее:

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

Если меняете несколько констант сразу, удобнее набор — он пишет их одной транзакцией:

Набор = Константы.СоздатьНабор("ПрефиксНумерации, ОсновнаяВалюта");
Набор.Прочитать();
Набор.ПрефиксНумерации = "ЦО";
Набор.ОсновнаяВалюта = Справочники.Валюты.НайтиПоКоду("643");
Набор.Записать();

Чтобы такую обработку запустить, в базе должно быть разрешено Интерактивное открытие внешних отчётов и обработок, а у вас — права администратора.

Метод Установить() записывает значение сразу, без дополнительного подтверждения. Если на запись константы в конфигурации навешан обработчик (подписка на событие), он отработает и при программной записи — это ещё одна причина сначала проверять правку на копии. Когда нужно записать значение в обход прав доступа внутри серверного кода, применяют привилегированный режим, но для разовой ручной правки это не требуется.

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

Значение константы можно не только задать, но и прочитать в запросе — это удобно для отчётов и проверок:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Константы.ОсновнаяВалюта КАК Валюта
|ИЗ
|    Константы КАК Константы";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Валюта = Выборка.Валюта;

Так значение константы попадает в отчёт или проверочную обработку без ручного открытия формы.

Что можно изменить в Конфигураторе

В Конфигуратор заходят не ради значения, а ради самой константы. Там доступно:

  • 🔤 переименование константы и изменение синонима;
  • 🧩 смена типа значения (число, строка, булево, ссылка на справочник);
  • 📏 настройка длины и точности для числовых и строковых типов;
  • ➕ создание новой константы в ветке Общие → Константы.

Задать начальное значение новой константы в Конфигураторе интерактивно нельзя. Его заполняют кодом — например, в обработчике заполнения при обновлении или отдельной процедурой, которая вызывает Установить() в «Предприятии».

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

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

После изменения структуры константы в Конфигураторе нужно обновить конфигурацию базы данных (Конфигурация → Обновить конфигурацию базы данных). Это и есть тот случай, когда платформе нужен монопольный доступ — на время обновления структуры другие сеансы в базу не войдут.

Почему константу не удаётся изменить: права и блокировки

Если поле значения открывается серым или кнопка записи недоступна, причина почти всегда в одном из трёх:

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

Отдельная ситуация — блокировка при записи. Если константу в этот момент пишет фоновое или регламентное задание в транзакции, ваша интерактивная запись подождёт его завершения. Это секунды; если ожидание затягивается, посмотрите активные сеансы и задания.

Не пытайтесь «пробить» блокировку, завершая чужие сеансы в рабочей базе без необходимости — вы оборвёте работу пользователей. Сначала разберитесь, какое задание держит запись.

Как тип значения влияет на ввод

Форма редактирования константы подстраивается под её тип — поэтому один и тот же шаг «вписать значение» выглядит по-разному:

  • ☑️ Булево — обычный флажок (включено / выключено);
  • 🔢 Число — числовое поле с учётом заданной точности;
  • ✏️ Строка — текстовое поле, ограниченное длиной из Конфигуратора;
  • 📅 Дата — поле с календарём;
  • 🔗 ссылочный тип (СправочникСсылка, ПеречислениеСсылка) — поле выбора из списка;
  • 🧰 составной тип — сначала выбираете, какой именно тип задаёте, затем значение.

Отдельно стоит тип ХранилищеЗначения и внутренние служебные константы: их не редактируют вручную через «Все функции» — только кодом или через форму, которую для них сделал разработчик.

Если при правке через «Все функции» не получается ввести ожидаемое значение (например, нужна ссылка на элемент, которого нет в списке), дело в типе: сначала создайте нужный объект, затем выберите его в константе.

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

Как узнать, кто и когда менял константу

Если значение «само» изменилось или вернулось к старому, виновника видно в журнале регистрации. Откройте Главное меню → Все функции → Стандартные → Журнал регистрации и отфильтруйте события по данным — записи об изменении констант фиксируются с пользователем и временем, когда регистрация этих событий включена.

Штатной кнопки «откатить константу к предыдущему значению» в платформе нет. Прежнее значение из журнала придётся вписать вручную — через «Все функции» или кодом. Поэтому перед правкой важной настройки запишите текущее значение отдельно: это и есть ваш способ отката.

В многофирменных базах легко перепутать константу с настройкой организации. Многие «настройки», которые кажутся константами (учётная политика, счета учёта), на самом деле хранятся в регистрах сведений по организациям, а не в константах. Если значение задаётся отдельно для каждой фирмы — это не константа, и менять его нужно в форме учётной политики соответствующей организации, а не через «Все функции».

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

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