Где найти и как увидеть значения констант в 1С

· 9 мин

Содержание

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

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

Что такое константа и где хранится её значение

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

Ключевые свойства констант:

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

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

Важная деталь, из-за которой чаще всего путаются: описание константы (её имя и тип) и значение константы живут в разных местах. Описание — в конфигурации, его видно в Конфигураторе. Значение — в базе данных, его видно только из 1С:Предприятие, отладчика или напрямую из СУБД.

Способ 1. Открыть список констант в Конфигураторе

Этот способ подходит администратору или разработчику, когда нужно понять, какие вообще константы есть в конфигурации и какого они типа. Значения через Конфигуратор не смотрят — их там нет.

Порядок действий:

  1. Запустите базу в режиме Конфигуратор.
  2. Откройте дерево конфигурации: меню Конфигурация → Открыть конфигурацию.
  3. Разверните ветку Общие → Константы.
  4. Двойным щелчком по нужной константе откройте её палитру свойств.

В свойствах вы увидите имя, синоним (человекочитаемое название для форм) и тип значения. Если константа ссылочного типа — увидите, на какой объект она ссылается. Там же, в свойстве Использовать стандартные команды, видно, доступна ли константа через типовые формы, а в свойстве типа — допустимую длину строки или точность числа.

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

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

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

Способ 2. Посмотреть значения через меню «Все функции»

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

Сначала включите команду (один раз):

  1. Нажмите кнопку Главное меню в левом верхнем углу.
  2. Выберите Сервис → Параметры.
  3. Поставьте флажок Отображать команду «Все функции» и нажмите ОК.

Затем откройте список:

  1. Главное меню → Все функции.
  2. В дереве раскройте ветку Константы.
  3. Двойным щелчком по константе откроется её форма с текущим значением.

В части релизов платформы 8.3 команда называется Функции для технического специалиста — суть и расположение те же. Это единственное место, где название кнопки может отличаться.

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

Кто может видеть значения констант

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

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

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

Способ 3. Прочитать константу программно

Разработчику значение константы нужно в коде — для расчётов, проверок, отчётов. Читают значение методом Получить():

Значение = Константы.НаименованиеОрганизации.Получить();
Сообщить("Значение константы: " + Строка(Значение));

Записать новое значение можно методом Установить():

Константы.ПрефиксУзлаРИБ.Установить("Ц");

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

Для Каждого ОписаниеКонстанты Из Метаданные.Константы Цикл
    ИмяКонстанты = ОписаниеКонстанты.Имя;
    Значение = Константы[ИмяКонстанты].Получить();
    Сообщить(ИмяКонстанты + " = " + Строка(Значение));
КонецЦикла;

Этот фрагмент выводит имя и значение каждой константы в окно сообщений. Обращение Константы[ИмяКонстанты] по строке с именем работает так же, как обращение через точку.

Когда нужно прочитать или записать сразу несколько констант одной транзакцией, используйте набор констант: НаборКонстант = Константы.СоздатьНабор();. Это снижает число обращений к базе и защищает от несогласованного состояния.

Чистое чтение через Получить() монопольного доступа не требует и другим сеансам не мешает.

Чтение константы в запросе

Значение константы можно получить и языком запросов — это удобно, когда оно нужно прямо в отчёте или в соединении с другими данными. Для каждой константы в запросе доступна виртуальная таблица Константа.<Имя> с единственным полем Значение:

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

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

Способ 4. Посмотреть константу в отладчике

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

  1. В Конфигураторе откройте нужный модуль и поставьте точку останова (клавиша F9 на строке).
  2. Запустите отладку (F5) и доведите выполнение до точки останова.
  3. Когда выполнение остановится, вычислите выражение.

Посмотреть значение можно двумя инструментами:

  • Табло (Отладка → Табло) — впишите в него строку Константы.НаименованиеОрганизации.Получить(), и в соседней колонке появится значение.
  • Вычислить выражение (Shift+F9) — то же самое в отдельном окне; удобно, когда выражение сложное или нужно раскрыть структуру ссылочного значения по полям.

Отладка серверного кода идёт на сервере, а клиентского — на клиенте. Если константу читает серверная процедура, вычисляйте выражение именно в серверной точке останова, иначе Получить() вернёт значение не из того контекста.

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

Через табло удобно сравнить несколько констант за один проход: впишите в отдельные строки сразу несколько выражений Константы.Первая.Получить(), Константы.Вторая.Получить() — и увидите все значения на одном экране, не меняя код. Если значение ссылочного типа, раскройте его в табло плюсиком и посмотрите реквизиты объекта, на который ссылается константа.

Способ 5. Прочитать значение напрямую из базы данных

Способ для опытных специалистов и только для диагностики, когда штатные средства недоступны (например, база не запускается). Каждая константа в клиент-серверном варианте хранится в СУБД в отдельной служебной таблице вида _ConstNNN, где NNN — внутренний номер.

Соответствие «константа → таблица» нельзя угадать по имени: его выдаёт платформа. Получить карту хранения можно функцией:

Структура = ПолучитьСтруктуруХраненияБазыДанных();

Она возвращает таблицу значений, где для каждого объекта метаданных указано имя его физической таблицы в СУБД. По этой карте и находят нужную таблицу _ConstNNN.

Читать значения из таблиц СУБД можно только на чтение и только с копии базы. Прямая запись в служебные таблицы 1С в обход платформы нарушает целостность данных и приводит к неработоспособности базы. Перед любым обращением к СУБД сделайте резервную копию.

Для файловой базы (1Cv8.1CD) прямого SQL-доступа нет — там этот способ неприменим, используйте способы 1–4. На практике к прямому чтению из СУБД прибегают редко: почти всегда задачу решают «Все функции» или программный доступ.

Ещё одна причина не лезть в СУБД напрямую: внутреннее хранение значения не совпадает с тем, что показывает платформа. Ссылочные типы хранятся бинарным представлением ссылки, составные типы — несколькими служебными полями с признаком типа. Разобрать это без платформы трудно и легко ошибиться, поэтому прямое чтение оставляют на крайний случай — когда база не стартует и штатные способы недоступны.

Сравнение способов: какой выбрать

Коротко — чем проще задача, тем выше в таблице способ.

СпособДля когоВидно значениеНужен Конфигуратор
«Все функции»пользователь, администраторданет
Программно Получить()разработчикда (в коде)нет
Отладчикдиагностика во время работыда (в моменте)да
Конфигураторразработчикнет, только описаниеда
Прямо из СУБДопытный, аварийные случаиданет

Как выбрать:

  • 👤 нужно просто посмотреть или поправить значение — «Все функции»;
  • 💻 значение нужно в коде отчёта или обработки — Получить();
  • 🔎 непонятно, почему программа ведёт себя не так — отладчик;
  • 🧩 нужно узнать тип и имя константы — Конфигуратор;
  • 🆘 база не запускается, а значение нужно вытащить — прямое чтение из СУБД (с копии).

Типичные проблемы при просмотре констант

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

В меню нет пункта «Все функции». Команда отключена. Включите флажок через Главное меню → Сервис → Параметры (способ 2). Если флажок стоит, а пункт всё равно не виден — не хватает прав, обратитесь к администратору.

Изменил константу, а поведение не поменялось. Часто значение уже прочитано в кэш или в переменную в начале сеанса. Перезапустите сеанс 1С:Предприятие. Для фоновых и регламентных заданий изменение подхватится при следующем запуске.

Через точку константа «не находится». В коде обращаются по синониму вместо имени. Правильное обращение — по имени из колонки «Имя» в Конфигураторе: Константы.<Имя>.Получить().

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

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