Где посмотреть, что записано в константе 1С 8.3: от режима «Все функции» до SQL
Содержание
Быстрее всего проверить значение константы в 1С 8.3 через режим «Все функции»: Главное меню → Все функции → Константы, затем двойной щелчок по нужной константе. Откроется форма с текущим значением. Если пункта «Все функции» нет, включите его в Главное меню → Сервис → Параметры флажком «Отображать команду “Все функции”».
Типичная ситуация: программист поменял настройку, а у бухгалтера в отчёте ничего не изменилось. Нужно понять, что на самом деле лежит в базе. Для этого есть ещё пять способов: код на встроенном языке, отладчик, консоль запросов, SQL-запрос к таблице константы и журнал регистрации. Выбор зависит от прав и от того, файловая база или клиент-серверная.
Что видно в конфигураторе, а чего там нет
В конфигураторе хранится описание константы, а не её значение. Это частая путаница у тех, кто впервые открывает дерево метаданных.
Найти константу в конфигураторе:
- Откройте
Конфигурация → Открыть конфигурацию. - В дереве метаданных раскройте ветку
Константы— она стоит в корне дерева, сразу после ветки «Общие». - Чтобы быстро найти объект, встаньте в раскрытую ветку и начните набирать имя: курсор перейдёт к совпадению.
Что вы узнаете из свойств константы:
- 📌 Имя — именно его пишут в коде (
ВалютаРегламентированногоУчета), а не синоним; - 🧩 Тип значения — Булево, Число, СправочникСсылка и т. д. От типа зависит, как значение хранится в SQL;
- 🔐 Права — на вкладке ролей видно, у каких ролей есть «Чтение» и «Изменение» этой константы;
- 🔗 Где используется — команда контекстного меню «Поиск ссылок на объект» покажет функциональные опции, формы и модули, которые к ней обращаются.
Последний пункт часто важнее самого значения. Константа типа Булево обычно привязана к функциональной опции. Тогда от неё зависит, видны ли в программе целые разделы и поля.
Само значение из конфигуратора можно увидеть только в режиме отладки (раздел ниже) или после запуска Отладка → Начать отладку → 1С:Предприятие, то есть уже в пользовательском режиме.
Просмотр константы в пользовательском режиме
Это способ для бухгалтера, администратора базы и всех, кто не открывает конфигуратор.
Через «Все функции»
Главное меню(кнопка с тремя полосками слева вверху) →Все функции.- Раскройте ветку
Константы. - Двойной щелчок по строке — откроется форма константы со значением.
В списке показаны синонимы. Если константа называется в коде ИспользоватьВалютныйУчет, ищите в списке что-то вроде «Использовать валютный учёт».
Если «Все функции» не открывается или константы в списке нет, дело в правах:
- в роли пользователя должно быть право «Режим “Все функции”» — это общее право конфигурации;
- на саму константу нужно право «Чтение», иначе её не будет в списке;
- полные права (роль «Администратор» в БСП) снимают оба ограничения.
Через формы настроек типовой конфигурации
В БП 3.0, ЗУП 3.1 и УТ 11 большая часть констант выведена на панели раздела Администрирование: «Общие настройки», «Органайзер», «Печатные формы, отчёты и обработки» и другие. Флажок на такой панели — это и есть константа, просто с понятной подписью.
Проверять через панель удобно, но есть нюанс. Одна и та же подпись может управлять несколькими константами сразу, а часть настроек хранится вовсе не в константах, а в регистрах сведений. Учётная политика в БП 3.0 — пример: она лежит в регистре по организациям и периодам, поэтому в списке констант её нет.
Форма константы в «Все функции» позволяет не только смотреть, но и менять значение. Кнопка «Записать и закрыть» запишет изменение сразу в рабочую базу. Если пришли только посмотреть — закрывайте форму крестиком и отвечайте «Нет» на вопрос о сохранении.
Получение значения константы кодом
Программисту удобнее спросить значение прямо из кода. Менеджер констант Константы доступен только на сервере. В клиентском коде формы обращение к нему даёт ошибку Переменная не определена (Константы).
Минимальный пример для формы обработки:
&НаКлиенте
Процедура ПоказатьЗначение(Команда)
Сообщить("Значение: " + ЗначениеКонстантыНаСервере("ВалютаРегламентированногоУчета"));
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗначениеКонстантыНаСервере(ИмяКонстанты)
Возврат Строка(Константы[ИмяКонстанты].Получить());
КонецФункции
Константы[ИмяКонстанты] — то же, что Константы.ВалютаРегламентированногоУчета, только имя передаётся строкой. Это пригодится, когда имя приходит из настроек или из цикла.
Выгрузить все константы разом
Вывести все константы базы с типами и значениями помогает обход коллекции Метаданные.Константы:
&НаСервереБезКонтекста
Процедура ВывестиВсеКонстанты()
Для Каждого МетаКонстанта Из Метаданные.Константы Цикл
Если Не ПравоДоступа("Чтение", МетаКонстанта) Тогда
Продолжить;
КонецЕсли;
Значение = Константы[МетаКонстанта.Имя].Получить();
Сообщить(СтрШаблон("%1 (%2) = %3",
МетаКонстанта.Имя, МетаКонстанта.Синоним, Значение));
КонецЦикла;
КонецПроцедуры
Проверка ПравоДоступа нужна, чтобы обработка не падала с Нарушение прав доступа! у пользователя с ограниченной ролью. Константы без права чтения просто пропускаются.
Менеджер значения
Второй вариант — Константы.Имя.СоздатьМенеджерЗначения(). У менеджера значения вызывают Прочитать(), затем берут свойство Значение. Этот путь нужен, если вы собираетесь значение менять и записывать с обработкой событий ПередЗаписью. Для простой проверки хватает Получить().
Отладчик: значение в момент выполнения кода
Отладчик показывает значение именно тогда, когда до него дошёл код. Это важно, если значение кешируется или его меняет другая процедура.
- В конфигураторе поставьте точку останова (
F9) на строке, после которой нужно проверить значение. - Запустите
Отладка → Начать отладку → 1С:Предприятие(F5) и выполните действие, которое вызывает этот код. - Когда выполнение остановится, откройте
Отладка → Вычислить выражение(Shift+F9). - Введите выражение
Константы.ИмяКонстанты.Получить()и нажмите «Рассчитать».
Выражение вычисляется в контексте той строки, где стоит отладчик. Если остановка в клиентской процедуре формы, менеджер Константы будет недоступен. Поставьте точку внутри серверной процедуры.
В клиент-серверной базе отладка серверного кода работает, только если сервер 1С запущен с разрешённой отладкой. Если серверные точки останова не срабатывают, это повод обратиться к администратору сервера, а не ошибка в коде.
Добавьте выражение в табло (Отладка → Табло). Тогда значение будет обновляться на каждом шаге и видно, в какой момент оно поменялось.
Запрос к таблице «Константы»
Язык запросов 1С умеет читать константы. Для этого есть отдельная таблица Константы, где каждая константа — это поле:
ВЫБРАТЬ
Константы.ВалютаРегламентированногоУчета КАК Валюта,
Константы.ВалютаРегламентированногоУчета.Код КАК КодВалюты
ИЗ
Константы КАК Константы
Запрос возвращает одну строку. Если тип константы — ссылка, через точку можно взять реквизиты, как во втором поле примера.
Где запустить такой запрос:
- в консоли запросов — внешней обработке, которую используют почти все 1С-ники. Откройте её через
Файл → Открытьв пользовательском режиме; - в конструкторе запроса конфигуратора можно только собрать текст, выполнить его там нельзя;
- в коде — через объект
Запросна сервере.
Удобство запроса в том, что константы легко соединить с другими данными. Например, сравнить валюту учёта с валютой документов за месяц.
Проверка констант прямым запросом к СУБД
Способ для администратора клиент-серверной базы на MS SQL Server или PostgreSQL, когда 1С не запускается, а значение нужно узнать. В файловой базе данные лежат в файле 1Cv8.1CD, и SQL к нему неприменим.
Каждая константа хранится в отдельной таблице вида _Const123. Значение лежит в поле _Fld124, где числа — внутренние номера. Сопоставить их с именем поможет функция ПолучитьСтруктуруХраненияБазыДанных:
&НаСервереБезКонтекста
Процедура ПоказатьТаблицуКонстанты()
Объекты = Новый Массив;
Объекты.Добавить(Метаданные.Константы.ВалютаРегламентированногоУчета);
Структура = ПолучитьСтруктуруХраненияБазыДанных(Объекты, Истина);
Для Каждого Строка Из Структура Цикл
Сообщить("Таблица: " + Строка.ИмяТаблицыХранения);
Для Каждого Поле Из Строка.Поля Цикл
Сообщить(" Поле: " + Поле.ИмяПоляХранения);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Второй параметр Истина возвращает имена так, как они называются в СУБД. Функцию выполняют на исправной копии базы с той же конфигурацией: номера таблиц у разных конфигураций разные.
Затем в SQL Server Management Studio или psql выполните чтение:
SELECT * FROM _Const123;
Как читать результат:
| Тип константы | Что лежит в поле | Как понять |
|---|---|---|
| Булево | 0x00 / 0x01 (в PostgreSQL false / true) | 1 — включено |
| Число, строка, дата | обычное значение | читается как есть |
| Ссылка на справочник | 16 байт _RRef | найти запись с тем же _IDRRef в таблице справочника |
| Составной тип | несколько полей: тип и значение | разбирать по структуре хранения |
Только чтение. Не меняйте данные в таблицах 1С через SQL: платформа не узнает об изменении, кеши и итоги разойдутся с данными. Кроме того, лицензионное соглашение 1С ограничивает работу с базой в обход платформы. Используйте этот способ для диагностики, а исправляйте значение уже в 1С.
Отчёты, обработки и журнал регистрации
Когда вопрос звучит как «кто и когда поменял константу», текущего значения мало. Помогают три инструмента.
Журнал регистрации
В типовых на БСП журнал открывается из раздела Администрирование → Обслуживание. В отборе укажите:
- событие «Данные. Изменение»;
- метаданные — нужную константу;
- период, когда предположительно поменяли настройку.
В строке события будут пользователь, компьютер и время записи. Новое значение журнал показывает в поле данных, если оно простого типа.
Внешняя обработка «Просмотр констант»
Код из раздела про встроенный язык удобно оформить внешней обработкой с табличным полем: имя, синоним, тип, значение. Её открывают через Файл → Открыть у пользователя с правом на открытие внешних обработок. В типовых на БСП внешнюю обработку
можно подключить через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки.
Сравнение двух баз
Если в рабочей базе поведение одно, а в копии другое, выгрузите все константы из обеих одним и тем же кодом и сравните списки. Расхождение почти всегда находится в одной-двух булевых константах функциональных опций.
| Способ | Кому подходит | Нужны права | Риски |
|---|---|---|---|
| «Все функции» | пользователю, администратору | право на режим и «Чтение» константы | можно случайно записать |
Код Получить() | программисту | внешняя обработка или конфигуратор | нет |
| Отладчик | программисту | доступ к конфигуратору | в клиент-сервере нужна разрешённая отладка |
| Консоль запросов | 1С-нику | открытие внешних обработок | нет |
| SQL | администратору СУБД | доступ к серверу СУБД | любая запись ломает базу |
| Журнал регистрации | администратору | право на журнал | события старше срока хранения удалены |
Почему значение «не то»: ошибки при проверке
Ищут по синониму в коде. Константы.Использовать валютный учёт не сработает. Нужно имя из свойств объекта, без пробелов. Опечатка в имени даёт ошибку Поле объекта не обнаружено.
Значение в базе новое, а программа ведёт себя по-старому. Типовые конфигурации кешируют часть настроек в модулях с повторным использованием возвращаемых значений. Функциональные опции тоже перечитываются не сразу. Пользователю, который видит старое поведение, достаточно перезапустить сеанс 1С.
Смотрят константу, а настройка хранится в регистре. Если в списке констант нет нужной настройки, ищите её в регистрах сведений: учётная политика, настройки по организациям, параметры на дату. Такие значения бывают периодическими: в одном месяце одно, в другом — другое.
Проверяют в копии вместо рабочей базы. Копия могла быть снята до изменения. Перед выводами посмотрите дату копии или проверьте журнал регистрации.
Обращаются к Константы на клиенте. В управляемой форме менеджер констант доступен только в серверных процедурах. Вынесите получение значения в процедуру с директивой &НаСервере или &НаСервереБезКонтекста.
Можно ли посмотреть константы, если у меня нет прав администратора?
Почему в «Все функции» нет ветки «Константы»?
Сервис → Параметры и роли пользователя.