Изменение значения константы в 1С 8.3
Содержание
Чаще всего значение константы в 1С 8.3 ищут в Конфигураторе — и не находят. Там задаётся только структура: имя, тип, длина. Само значение хранится в базе и меняется в режиме «Предприятие».
Поменять константу в 1С 8 можно тремя путями: вручную через меню Все функции, через форму настроек конфигурации или программно — вызовом Установить(). Ниже разберём каждый способ, права, которые для этого нужны, и причины, по которым изменить значение константы не получается.
Если нужно быстро выбрать способ — начните с подсказки:
Главное меню → Все функции → Константы, выберите константу и впишите новое значение. Самый прямой путь.Главное или Администрирование вашей конфигурации. Там константа подписана понятным названием.Константы.Имя.Установить(Значение) и выполните в «Предприятии».Где хранится значение и почему его нет в Конфигураторе
Константа в 1С — это объект метаданных, который хранит одно значение на всю базу. Не таблицу, как справочник, а именно одно: ставку НДС по умолчанию, основную валюту, префикс нумерации документов, название организации в однофирменной базе.
В Конфигураторе вы видите константу в ветке Общие → Константы, но её значения там нет. Конфигуратор описывает, какой у константы тип и как она называется. Значение живёт в базе данных и доступно только в режиме «Предприятие».
В отличие от регистра сведений, у константы нет измерений и периодичности — она хранит ровно одно значение на всю информационную базу. Поэтому «изменить константу» всегда означает заменить это единственное значение новым, старое не сохраняется.
Отсюда главный вывод: чтобы поменять значение константы, Конфигуратор не нужен. Он нужен, только если надо изменить саму константу — переименовать, сменить тип или добавить новую.
Как изменить константу через «Все функции»
Это универсальный способ: работает в любой конфигурации на управляемых формах, когда вы знаете имя константы.
- Включите команду, если её не видно.
Главное меню(значок в левом верхнем углу) →Сервис→Параметры→ поставьте флажокОтображать команду "Все функции". - Откройте
Главное меню → Все функции. - Разверните ветку
Константы. - Двойным щелчком откройте нужную константу.
- Впишите новое значение и нажмите
Записать и закрыть.
Изменение применяется сразу, перезапуск базы не требуется.
Если список констант длинный, воспользуйтесь строкой фильтра над деревом «Все функции» — наберите часть имени, и список сократится.
Для входа через «Все функции» и правки значений нужны соответствующие права (обычно профиль «Администратор» или «Полные права»). Обычному пользователю эта ветка часто недоступна.
Разберём на примере. Нужно сменить префикс нумерации документов с пустого на ЦО, чтобы отличать центральный офис. Открываете Все функции → Константы → Префикс (точное имя смотрите в Конфигураторе), вписываете ЦО, записываете. Новые документы пойдут с этим префиксом; уже проведённые номера не меняются — префикс влияет только на присваивание новых номеров.
Интерфейс «Такси» (платформа 8.3) показывает дерево «Все функции» в отдельном окне. Если вы работаете в тонком клиенте через браузер, окно открывается там же; порядок действий тот же.
Константы в формах настроек конфигураций
Большинство прикладных констант разработчики выводят в понятные формы настроек, чтобы бухгалтер не искал их в «Все функции». Называются они там по-человечески: «Основная валюта», «Применяется УСН», «Префикс».
Путь зависит от конфигурации, но раздел верхнего уровня стабилен:
| Конфигурация | Где искать константы-настройки |
|---|---|
| Бухгалтерия 3.0 | раздел Главное (налоги и отчёты, функциональность, организации) и Администрирование |
| ЗУП 3.1 | раздел Настройка и Администрирование |
| Управление торговлей 11 | раздел НСИ и администрирование → Администрирование |
Точное название формы внутри раздела в разных релизах может немного отличаться, но верхний раздел ищите именно там. Значение, введённое в такой форме, записывается в ту же константу, что и через «Все функции», — это один и тот же объект.
Когда не знаете, в какой именно форме «спрятана» нужная настройка, помогает общий поиск: в конфигурациях на БСП есть строка поиска по разделам и командам (значок лупы в правом верхнем углу). Наберите часть названия настройки — платформа подскажет, в каком разделе её открыть. Если же настройку задумано менять только через «Все функции», в формах она не появится вовсе — тогда идите сразу в ветку Константы.
Как поменять константу программно в режиме «Предприятие»
Когда правок много или значение зависит от условия, пишут код. Выполняют его во внешней обработке с модулем, запущенной в «Предприятии».
Записать одно значение:
// Выполняется в режиме Предприятие
Константы.ОсновнаяВалюта.Установить(Справочники.Валюты.НайтиПоКоду("643"));
Прочитать текущее:
ТекущаяВалюта = Константы.ОсновнаяВалюта.Получить();
Если меняете несколько констант сразу, удобнее набор — он пишет их одной транзакцией:
Набор = Константы.СоздатьНабор("ПрефиксНумерации, ОсновнаяВалюта");
Набор.Прочитать();
Набор.ПрефиксНумерации = "ЦО";
Набор.ОсновнаяВалюта = Справочники.Валюты.НайтиПоКоду("643");
Набор.Записать();
Чтобы такую обработку запустить, в базе должно быть разрешено Интерактивное открытие внешних отчётов и обработок, а у вас — права администратора.
Метод Установить() записывает значение сразу, без дополнительного подтверждения. Если на запись константы в конфигурации навешан обработчик (подписка на событие), он отработает и при программной записи — это ещё одна причина сначала проверять правку на копии. Когда нужно записать значение в обход прав доступа внутри серверного кода, применяют привилегированный режим, но для разовой ручной правки это не требуется.
Запись в константу напрямую обходит логику формы настроек. Если на значение завязаны учётные механизмы (например, смена валюты или политики учёта), сначала проверьте результат на копии базы. Перед массовой правкой констант в рабочей базе сделайте резервную копию.
Значение константы можно не только задать, но и прочитать в запросе — это удобно для отчётов и проверок:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Константы.ОсновнаяВалюта КАК Валюта
|ИЗ
| Константы КАК Константы";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Валюта = Выборка.Валюта;
Так значение константы попадает в отчёт или проверочную обработку без ручного открытия формы.
Что можно изменить в Конфигураторе
В Конфигуратор заходят не ради значения, а ради самой константы. Там доступно:
- 🔤 переименование константы и изменение синонима;
- 🧩 смена типа значения (число, строка, булево, ссылка на справочник);
- 📏 настройка длины и точности для числовых и строковых типов;
- ➕ создание новой константы в ветке
Общие → Константы.
Задать начальное значение новой константы в Конфигураторе интерактивно нельзя. Его заполняют кодом — например, в обработчике заполнения при обновлении или отдельной процедурой, которая вызывает Установить() в «Предприятии».
В свойствах константы в Конфигураторе есть и управление тем, как она будет доступна пользователю: флажок Использовать стандартные команды определяет, появится ли константа в «Все функции», а свойство Основное действие — какую форму открывать. Если прикладная константа не видна пользователю, часто причина именно в снятом флажке стандартных команд.
Смена типа у заполненной константы может обнулить или исказить её значение, если старый тип несовместим с новым. Выгрузите базу перед такими правками.
После изменения структуры константы в Конфигураторе нужно обновить конфигурацию
базы данных (Конфигурация → Обновить конфигурацию базы данных). Это и есть тот случай, когда платформе нужен монопольный доступ — на время обновления структуры другие сеансы в базу не войдут.
Почему константу не удаётся изменить: права и блокировки
Если поле значения открывается серым или кнопка записи недоступна, причина почти всегда в одном из трёх:
Отдельная ситуация — блокировка при записи. Если константу в этот момент пишет фоновое или регламентное задание в транзакции, ваша интерактивная запись подождёт его завершения. Это секунды; если ожидание затягивается, посмотрите активные сеансы и задания.
Не пытайтесь «пробить» блокировку, завершая чужие сеансы в рабочей базе без необходимости — вы оборвёте работу пользователей. Сначала разберитесь, какое задание держит запись.
Как тип значения влияет на ввод
Форма редактирования константы подстраивается под её тип — поэтому один и тот же шаг «вписать значение» выглядит по-разному:
- ☑️
Булево— обычный флажок (включено / выключено); - 🔢
Число— числовое поле с учётом заданной точности; - ✏️
Строка— текстовое поле, ограниченное длиной из Конфигуратора; - 📅
Дата— поле с календарём; - 🔗 ссылочный тип (
СправочникСсылка,ПеречислениеСсылка) — поле выбора из списка; - 🧰 составной тип — сначала выбираете, какой именно тип задаёте, затем значение.
Отдельно стоит тип ХранилищеЗначения и внутренние служебные константы: их не редактируют вручную через «Все функции» — только кодом или через форму, которую для них сделал разработчик.
Если при правке через «Все функции» не получается ввести ожидаемое значение (например, нужна ссылка на элемент, которого нет в списке), дело в типе: сначала создайте нужный объект, затем выберите его в константе.
Для составного типа форма сначала просит выбрать, какой из разрешённых типов вы задаёте. Например, если константа допускает и число, и ссылку на справочник, сверху появится переключатель типа, и только после выбора откроется нужное поле ввода. Пустое значение составной константы — это тип NULL, его тоже можно задать явно.
Как узнать, кто и когда менял константу
Если значение «само» изменилось или вернулось к старому, виновника видно в журнале регистрации. Откройте Главное меню → Все функции → Стандартные → Журнал регистрации и отфильтруйте события по данным — записи об изменении констант фиксируются с пользователем и временем, когда регистрация этих событий включена.
Штатной кнопки «откатить константу к предыдущему значению» в платформе нет. Прежнее значение из журнала придётся вписать вручную — через «Все функции» или кодом. Поэтому перед правкой важной настройки запишите текущее значение отдельно: это и есть ваш способ отката.
В многофирменных базах легко перепутать константу с настройкой организации. Многие «настройки», которые кажутся константами (учётная политика, счета учёта), на самом деле хранятся в регистрах сведений по организациям, а не в константах. Если значение задаётся отдельно для каждой фирмы — это не константа, и менять его нужно в форме учётной политики соответствующей организации, а не через «Все функции».
Частые вопросы
Можно ли поменять значение константы прямо в Конфигураторе?
Нужно ли перезапускать базу после изменения константы?
Почему обычный пользователь не видит константы в «Все функции»?
Как узнать внутреннее имя константы для кода?
Общие → Константы — имя указано в свойстве «Имя». Именно его подставляют в Константы.Имя.Установить().