Где найти и как увидеть значения констант в 1С
Содержание
Значения констант в 1С 8.3 быстрее всего смотреть в режиме 1С:Предприятие через меню «Все функции» → раздел «Константы»: там видно и имя, и текущее значение каждой константы. В Конфигураторе значения не хранятся — там только описание констант (имя, тип). Программно значение возвращает Константы.ИмяКонстанты.Получить().
Способ зависит от вашей роли: пользователю хватит меню «Все функции», разработчику ближе Получить() и запрос, при разборе непонятного поведения выручает отладчик, а прямое чтение из СУБД остаётся на аварийные случаи, когда база не запускается.
Что такое константа и где хранится её значение
Константа — это объект конфигурации, который хранит одно значение фиксированного типа на всю информационную базу. В неё записывают глобальные настройки: основную организацию, префикс документов, параметры учётной политики, флаги включённых подсистем.
Ключевые свойства констант:
- 📌 значение одно на всю базу, а не на пользователя (этим константа отличается от хранилища настроек);
- 📌 тип значения задан в конфигурации и жёстко ограничен (строка, число, булево, ссылка на справочник и т. п.);
- 📌 в метаданных константы лежат в ветке
Общие → Константы; - 📌 физически каждое значение хранится в базе в отдельной служебной таблице.
Типичные примеры констант в типовых конфигурациях: основная организация, префикс нумерации документов, дата запрета изменения данных, параметры округления, флаги включённых функциональных опций. Значение у каждой своё и одно — выбрать две основные организации через одну константу нельзя, для этого в конфигурации завели бы справочник или регистр.
Важная деталь, из-за которой чаще всего путаются: описание константы (её имя и тип) и значение константы живут в разных местах. Описание — в конфигурации, его видно в Конфигураторе. Значение — в базе данных, его видно только из 1С:Предприятие, отладчика или напрямую из СУБД.
Способ 1. Открыть список констант в Конфигураторе
Этот способ подходит администратору или разработчику, когда нужно понять, какие вообще константы есть в конфигурации и какого они типа. Значения через Конфигуратор не смотрят — их там нет.
Порядок действий:
- Запустите базу в режиме
Конфигуратор. - Откройте дерево конфигурации: меню
Конфигурация → Открыть конфигурацию. - Разверните ветку
Общие → Константы. - Двойным щелчком по нужной константе откройте её палитру свойств.
В свойствах вы увидите имя, синоним (человекочитаемое название для форм) и тип значения. Если константа ссылочного типа — увидите, на какой объект она ссылается. Там же, в свойстве Использовать стандартные команды, видно, доступна ли константа через типовые формы, а в свойстве типа — допустимую длину строки или точность числа.
Полный список констант конфигурации удобно получить из окна Конфигурация → Отчёт по конфигурации (или из вывода всех объектов метаданных) — это пригодится, когда констант много и нужно свериться, какие из них вообще заведены.
Запоминайте точное имя константы из колонки «Имя», а не синоним. В программном коде и в запросах обращаются именно по имени.
Конфигуратору не нужен монопольный доступ для просмотра дерева метаданных — другие пользователи при этом спокойно работают в базе.
Способ 2. Посмотреть значения через меню «Все функции»
Самый простой способ для пользователя и бухгалтера — встроенный служебный список констант в режиме 1С:Предприятие. Отдельного экрана «Константы» в типовых конфигурациях для пользователя нет, но его открывает служебное меню.
Сначала включите команду (один раз):
- Нажмите кнопку
Главное менюв левом верхнем углу. - Выберите
Сервис → Параметры. - Поставьте флажок
Отображать команду «Все функции»и нажмитеОК.
Затем откройте список:
Главное меню → Все функции.- В дереве раскройте ветку
Константы. - Двойным щелчком по константе откроется её форма с текущим значением.
В части релизов платформы 8.3 команда называется Функции для технического специалиста — суть и расположение те же. Это единственное место, где название кнопки может отличаться.
Команда «Все функции» показывает все константы базы вместе с их значениями и позволяет значение изменить прямо в форме. Поэтому доступ к ней обычно открыт только администраторам: рядовому пользователю этот пункт меню, как правило, скрыт настройкой прав.
Кто может видеть значения констант
Видимость констант управляется правами ролей, назначенных пользователю:
- чтобы пользователь увидел значение константы, у его роли должно быть право
Просмотрна эту константу; - чтобы менять значение — право
Редактирование; - доступ к самому пункту «Все функции» регулируется правом на работу с этим режимом.
Если константу нужно показать пользователю, но закрыть ему остальные, значение обычно выводят не через «Все функции», а в специальную форму настроек подсистемы. В типовых конфигурациях большинство констант так и редактируется — через раздел настроек, а не напрямую. Поэтому, если вы знаете параметр по названию в настройках, но не можете найти его среди констант, он всё равно хранится в константе — просто форма настроек подставляет человекочитаемое название вместо технического имени.
Способ 3. Прочитать константу программно
Разработчику значение константы нужно в коде — для расчётов, проверок, отчётов. Читают значение методом Получить():
Значение = Константы.НаименованиеОрганизации.Получить();
Сообщить("Значение константы: " + Строка(Значение));
Записать новое значение можно методом Установить():
Константы.ПрефиксУзлаРИБ.Установить("Ц");
Если нужно пройтись по всем константам сразу — например, выгрузить их для диагностики, — переберите коллекцию метаданных:
Для Каждого ОписаниеКонстанты Из Метаданные.Константы Цикл
ИмяКонстанты = ОписаниеКонстанты.Имя;
Значение = Константы[ИмяКонстанты].Получить();
Сообщить(ИмяКонстанты + " = " + Строка(Значение));
КонецЦикла;
Этот фрагмент выводит имя и значение каждой константы в окно сообщений. Обращение Константы[ИмяКонстанты] по строке с именем работает так же, как обращение через точку.
Когда нужно прочитать или записать сразу несколько констант одной транзакцией, используйте набор констант: НаборКонстант = Константы.СоздатьНабор();. Это снижает число обращений к базе и защищает от несогласованного состояния.
Чистое чтение через Получить() монопольного доступа не требует и другим сеансам не мешает.
Чтение константы в запросе
Значение константы можно получить и языком запросов — это удобно, когда оно нужно прямо в отчёте или в соединении с другими данными. Для каждой константы в запросе доступна виртуальная таблица Константа.<Имя> с единственным полем Значение:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОсновнаяОрганизация.Значение КАК Организация
|ИЗ
| Константа.ОсновнаяОрганизация КАК ОсновнаяОрганизация";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Сообщить(Выборка.Организация);
Способ через запрос особенно полезен, когда значений констант много и их нужно сопоставить с движениями регистров или данными справочников в одном запросе, не вытягивая каждое отдельным Получить().
Способ 4. Посмотреть константу в отладчике
Когда значение нужно увидеть во время выполнения кода — например, вы ищете, почему отчёт берёт не ту организацию, — удобнее всего отладчик.
- В Конфигураторе откройте нужный модуль и поставьте точку останова (клавиша
F9на строке). - Запустите отладку (
F5) и доведите выполнение до точки останова. - Когда выполнение остановится, вычислите выражение.
Посмотреть значение можно двумя инструментами:
- Табло (
Отладка → Табло) — впишите в него строкуКонстанты.НаименованиеОрганизации.Получить(), и в соседней колонке появится значение. - Вычислить выражение (
Shift+F9) — то же самое в отдельном окне; удобно, когда выражение сложное или нужно раскрыть структуру ссылочного значения по полям.
Отладка серверного кода идёт на сервере, а клиентского — на клиенте. Если константу читает серверная процедура, вычисляйте выражение именно в серверной точке останова, иначе Получить() вернёт значение не из того контекста.
Отладчик показывает значение на конкретный момент выполнения. Это помогает поймать случай, когда значение уже прочитано в переменную ранее и дальше по коду не обновляется, хотя в базе его успели изменить.
Через табло удобно сравнить несколько констант за один проход: впишите в отдельные строки сразу несколько выражений Константы.Первая.Получить(), Константы.Вторая.Получить() — и увидите все значения на одном экране, не меняя код. Если значение ссылочного типа, раскройте его в табло плюсиком и посмотрите реквизиты объекта, на который ссылается константа.
Способ 5. Прочитать значение напрямую из базы данных
Способ для опытных специалистов и только для диагностики, когда штатные средства недоступны (например, база не запускается). Каждая константа в клиент-серверном варианте хранится в СУБД в отдельной служебной таблице вида _ConstNNN, где NNN — внутренний номер.
Соответствие «константа → таблица» нельзя угадать по имени: его выдаёт платформа. Получить карту хранения можно функцией:
Структура = ПолучитьСтруктуруХраненияБазыДанных();
Она возвращает таблицу значений, где для каждого объекта метаданных указано имя его физической таблицы в СУБД. По этой карте и находят нужную таблицу _ConstNNN.
Читать значения из таблиц СУБД можно только на чтение и только с копии базы. Прямая запись в служебные таблицы 1С в обход платформы нарушает целостность данных и приводит к неработоспособности базы. Перед любым обращением к СУБД сделайте резервную копию.
Для файловой базы (1Cv8.1CD) прямого SQL-доступа нет — там этот способ неприменим, используйте способы 1–4. На практике к прямому чтению из СУБД прибегают редко: почти всегда задачу решают «Все функции» или программный доступ.
Ещё одна причина не лезть в СУБД напрямую: внутреннее хранение значения не совпадает с тем, что показывает платформа. Ссылочные типы хранятся бинарным представлением ссылки, составные типы — несколькими служебными полями с признаком типа. Разобрать это без платформы трудно и легко ошибиться, поэтому прямое чтение оставляют на крайний случай — когда база не стартует и штатные способы недоступны.
Сравнение способов: какой выбрать
Коротко — чем проще задача, тем выше в таблице способ.
| Способ | Для кого | Видно значение | Нужен Конфигуратор |
|---|---|---|---|
| «Все функции» | пользователь, администратор | да | нет |
Программно Получить() | разработчик | да (в коде) | нет |
| Отладчик | диагностика во время работы | да (в моменте) | да |
| Конфигуратор | разработчик | нет, только описание | да |
| Прямо из СУБД | опытный, аварийные случаи | да | нет |
Как выбрать:
- 👤 нужно просто посмотреть или поправить значение — «Все функции»;
- 💻 значение нужно в коде отчёта или обработки —
Получить(); - 🔎 непонятно, почему программа ведёт себя не так — отладчик;
- 🧩 нужно узнать тип и имя константы — Конфигуратор;
- 🆘 база не запускается, а значение нужно вытащить — прямое чтение из СУБД (с копии).
Типичные проблемы при просмотре констант
Константа есть, а значение пустое. Константу завели в конфигурации, но ни разу не заполнили. Откройте её через «Все функции» и задайте значение. Пустое значение — это нормальное начальное состояние, а не ошибка.
В меню нет пункта «Все функции». Команда отключена. Включите флажок через Главное меню → Сервис → Параметры (способ 2). Если флажок стоит, а пункт всё равно не виден — не хватает прав, обратитесь к администратору.
Изменил константу, а поведение не поменялось. Часто значение уже прочитано в кэш или в переменную в начале сеанса. Перезапустите сеанс 1С:Предприятие. Для фоновых и регламентных заданий изменение подхватится при следующем запуске.
Через точку константа «не находится». В коде обращаются по синониму вместо имени. Правильное обращение — по имени из колонки «Имя» в Конфигураторе: Константы.<Имя>.Получить().
В узлах распределённой базы значения разные. В РИБ константа переносится между узлами, только если входит в состав плана обмена. Если она в план не включена, в каждом узле своё значение — это не сбой, а настройка обмена. Проверьте состав плана обмена в конфигурации.
Чем константа отличается от хранилища настроек?
Можно ли посмотреть все значения констант одним списком?
Главное меню → Все функции → Константы — там сразу видно все константы базы с текущими значениями. Программно тот же результат даёт перебор коллекции Метаданные.Константы.Почему в Конфигураторе не видно значения константы?
1С:Предприятие, отладчика или СУБД.Как узнать, в какой таблице СУБД лежит константа?
ПолучитьСтруктуруХраненияБазыДанных() — она вернёт соответствие объектов метаданных и физических таблиц вида _ConstNNN. Угадывать номер таблицы по имени константы нельзя.Нужен ли монопольный доступ, чтобы посмотреть константы?
Получить(), и просмотр дерева в Конфигураторе работают без монопольного доступа — другие пользователи продолжают работать в базе.