Где посмотреть, что записано в константе 1С 8.3: от режима «Все функции» до SQL

· 9 мин

Содержание

Быстрее всего проверить значение константы в 1С 8.3 через режим «Все функции»: Главное меню → Все функции → Константы, затем двойной щелчок по нужной константе. Откроется форма с текущим значением. Если пункта «Все функции» нет, включите его в Главное меню → Сервис → Параметры флажком «Отображать команду “Все функции”».

Типичная ситуация: программист поменял настройку, а у бухгалтера в отчёте ничего не изменилось. Нужно понять, что на самом деле лежит в базе. Для этого есть ещё пять способов: код на встроенном языке, отладчик, консоль запросов, SQL-запрос к таблице константы и журнал регистрации. Выбор зависит от прав и от того, файловая база или клиент-серверная.

Что видно в конфигураторе, а чего там нет

В конфигураторе хранится описание константы, а не её значение. Это частая путаница у тех, кто впервые открывает дерево метаданных.

Найти константу в конфигураторе:

  1. Откройте Конфигурация → Открыть конфигурацию.
  2. В дереве метаданных раскройте ветку Константы — она стоит в корне дерева, сразу после ветки «Общие».
  3. Чтобы быстро найти объект, встаньте в раскрытую ветку и начните набирать имя: курсор перейдёт к совпадению.

Что вы узнаете из свойств константы:

  • 📌 Имя — именно его пишут в коде (ВалютаРегламентированногоУчета), а не синоним;
  • 🧩 Тип значения — Булево, Число, СправочникСсылка и т. д. От типа зависит, как значение хранится в SQL;
  • 🔐 Права — на вкладке ролей видно, у каких ролей есть «Чтение» и «Изменение» этой константы;
  • 🔗 Где используется — команда контекстного меню «Поиск ссылок на объект» покажет функциональные опции, формы и модули, которые к ней обращаются.

Последний пункт часто важнее самого значения. Константа типа Булево обычно привязана к функциональной опции. Тогда от неё зависит, видны ли в программе целые разделы и поля.

Само значение из конфигуратора можно увидеть только в режиме отладки (раздел ниже) или после запуска Отладка → Начать отладку → 1С:Предприятие, то есть уже в пользовательском режиме.

Просмотр константы в пользовательском режиме

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

Через «Все функции»

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

В списке показаны синонимы. Если константа называется в коде ИспользоватьВалютныйУчет, ищите в списке что-то вроде «Использовать валютный учёт».

Если «Все функции» не открывается или константы в списке нет, дело в правах:

  • в роли пользователя должно быть право «Режим “Все функции”» — это общее право конфигурации;
  • на саму константу нужно право «Чтение», иначе её не будет в списке;
  • полные права (роль «Администратор» в БСП) снимают оба ограничения.

Через формы настроек типовой конфигурации

В БП 3.0, ЗУП 3.1 и УТ 11 большая часть констант выведена на панели раздела Администрирование: «Общие настройки», «Органайзер», «Печатные формы, отчёты и обработки» и другие. Флажок на такой панели — это и есть константа, просто с понятной подписью.

Проверять через панель удобно, но есть нюанс. Одна и та же подпись может управлять несколькими константами сразу, а часть настроек хранится вовсе не в константах, а в регистрах сведений. Учётная политика в БП 3.0 — пример: она лежит в регистре по организациям и периодам, поэтому в списке констант её нет.

Форма константы в «Все функции» позволяет не только смотреть, но и менять значение. Кнопка «Записать и закрыть» запишет изменение сразу в рабочую базу. Если пришли только посмотреть — закрывайте форму крестиком и отвечайте «Нет» на вопрос о сохранении.

Получение значения константы кодом

Программисту удобнее спросить значение прямо из кода. Менеджер констант Константы доступен только на сервере. В клиентском коде формы обращение к нему даёт ошибку Переменная не определена (Константы).

Минимальный пример для формы обработки:

&НаКлиенте
Процедура ПоказатьЗначение(Команда)
    Сообщить("Значение: " + ЗначениеКонстантыНаСервере("ВалютаРегламентированногоУчета"));
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗначениеКонстантыНаСервере(ИмяКонстанты)
    Возврат Строка(Константы[ИмяКонстанты].Получить());
КонецФункции

Константы[ИмяКонстанты] — то же, что Константы.ВалютаРегламентированногоУчета, только имя передаётся строкой. Это пригодится, когда имя приходит из настроек или из цикла.

Выгрузить все константы разом

Вывести все константы базы с типами и значениями помогает обход коллекции Метаданные.Константы:

&НаСервереБезКонтекста
Процедура ВывестиВсеКонстанты()
    Для Каждого МетаКонстанта Из Метаданные.Константы Цикл
        Если Не ПравоДоступа("Чтение", МетаКонстанта) Тогда
            Продолжить;
        КонецЕсли;
        Значение = Константы[МетаКонстанта.Имя].Получить();
        Сообщить(СтрШаблон("%1 (%2) = %3",
            МетаКонстанта.Имя, МетаКонстанта.Синоним, Значение));
    КонецЦикла;
КонецПроцедуры

Проверка ПравоДоступа нужна, чтобы обработка не падала с Нарушение прав доступа! у пользователя с ограниченной ролью. Константы без права чтения просто пропускаются.

Менеджер значения

Второй вариант — Константы.Имя.СоздатьМенеджерЗначения(). У менеджера значения вызывают Прочитать(), затем берут свойство Значение. Этот путь нужен, если вы собираетесь значение менять и записывать с обработкой событий ПередЗаписью. Для простой проверки хватает Получить().

Отладчик: значение в момент выполнения кода

Отладчик показывает значение именно тогда, когда до него дошёл код. Это важно, если значение кешируется или его меняет другая процедура.

  1. В конфигураторе поставьте точку останова (F9) на строке, после которой нужно проверить значение.
  2. Запустите Отладка → Начать отладку → 1С:Предприятие (F5) и выполните действие, которое вызывает этот код.
  3. Когда выполнение остановится, откройте Отладка → Вычислить выражение (Shift+F9).
  4. Введите выражение Константы.ИмяКонстанты.Получить() и нажмите «Рассчитать».

Выражение вычисляется в контексте той строки, где стоит отладчик. Если остановка в клиентской процедуре формы, менеджер Константы будет недоступен. Поставьте точку внутри серверной процедуры.

В клиент-серверной базе отладка серверного кода работает, только если сервер 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С.

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

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

Обращаются к Константы на клиенте. В управляемой форме менеджер констант доступен только в серверных процедурах. Вынесите получение значения в процедуру с директивой &НаСервере или &НаСервереБезКонтекста.

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