Константа, регистр, хранилище или файл: куда положить настройку в 1С 8.3

· 10 мин

Содержание

Общую настройку для всей базы храните в константе или регистре сведений, личную настройку пользователя — в ХранилищеОбщихНастроек, пароли и токены — в безопасном хранилище БСП. Внешние файлы и реестр Windows нужны только для того, что должно жить вне базы: список баз, параметры запуска, настройки сервера.

Вопрос встаёт, когда настройку уже положили «куда получилось». Путь к папке обмена зашит в коде, пароль от API лежит в обычной константе, а после копирования базы в тест она начинает слать данные в боевой сервис. Ниже — какое место подходит для какой настройки и почему. Механизмы общие для платформы 8.3 и не зависят от конфигурации, кроме мест, где речь о БСП.

Какие механизмы хранения настроек есть в платформе 1С

В платформе 1С:Предприятие 8.3 нет одного «места для настроек». Есть набор объектов, и у каждого своя задача.

  • 📌 Константы — одно значение на всю базу. Путь к каталогу обмена, основная организация, флаг «использовать склады».
  • 📌 Регистры сведений — набор значений с измерениями. Настройка «по организации», «по складу», «по периоду».
  • 📌 Справочники — когда настроек много и у каждой есть свои реквизиты. Например, справочник подключений к внешним сервисам.
  • 📌 Функциональные опции — включают и выключают части интерфейса. Значение хранится в константе или регистре, опция только читает его.
  • 📌 Хранилища настроек — личные настройки пользователей: формы, отчёты, последние выбранные значения.
  • 📌 Параметры сеанса — значения на время сеанса. После выхода пользователя они пропадают, для постоянного хранения не подходят.

Первые четыре варианта — данные базы, они общие для всех. Хранилища настроек привязаны к пользователю. Это главное различие, от него и стоит отталкиваться.

Что за настройкаГде хранитьПочему
Одно значение на всю базуКонстантаПросто читать, видно в интерфейсе
Значение в разрезе организации, склада, датыРегистр сведенийЕсть измерения и периодичность
Много однотипных записей с реквизитамиСправочникУдобно редактировать списком
Личный выбор пользователяХранилищеОбщихНастроекНе мешает другим пользователям
Пароль, токен, секретный ключБезопасное хранилище БСПЗакрыто от обычного чтения
Параметры запуска, список базФайлы на компьютере пользователяНужны до входа в базу

Пользовательские настройки форм и отчётов

Когда пользователь двигает колонки, меняет отбор или сохраняет вариант отчёта, платформа пишет это в стандартные хранилища. Их пять:

  1. ХранилищеОбщихНастроек — произвольные настройки, которые разработчик сохраняет из кода.
  2. ХранилищеСистемныхНастроек — положение окон, состав командных панелей, расположение элементов формы.
  3. ХранилищеНастроекДанныхФорм — значения реквизитов формы, если у них включено сохранение.
  4. ХранилищеВариантовОтчетов — варианты отчётов, созданные пользователями.
  5. ХранилищеПользовательскихНастроекОтчетов — пользовательские настройки внутри варианта: отборы, периоды, группировки.

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

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

Как сохранить свою настройку из кода

Типичная задача: обработка выгрузки прайса должна помнить папку, которую пользователь выбрал в прошлый раз. Для этого хватит ХранилищеОбщихНастроек:

&НаСервереБезКонтекста
Процедура СохранитьПутьВыгрузки(ПутьВыгрузки)
	ХранилищеОбщихНастроек.Сохранить("Обработка.ВыгрузкаПрайса", "ПутьВыгрузки", ПутьВыгрузки);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПрочитатьПутьВыгрузки()
	Значение = ХранилищеОбщихНастроек.Загрузить("Обработка.ВыгрузкаПрайса", "ПутьВыгрузки");
	Если Значение = Неопределено Тогда
		Значение = "C:\Exchange\";
	КонецЕсли;
	Возврат Значение;
КонецФункции

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

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

В типовых конфигурациях на БСП удобнее вызывать обёртки ОбщегоНазначения.ХранилищеОбщихНастроекСохранить и ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить. Они корректно отрабатывают отсутствие права и не требуют отдельной проверки.

Внешние файлы и отдельные базы данных для настроек

Файл рядом с базой — соблазнительный вариант: открыл блокнотом, поправил. Но у файла три слабых места.

  • 🔸 В клиент-серверном варианте код на сервере читает файл на сервере 1С от имени пользователя службы, обычно USR1CV8. Путь C:\Settings\exchange.json будет искаться там, а не на компьютере бухгалтера.
  • 🔸 Файл не попадает в выгрузку .dt и в резервную копию СУБД. После восстановления базы его придётся переносить руками.
  • 🔸 Нет разграничения прав средствами 1С: кто имеет доступ к папке, тот и меняет настройку.

Поэтому внешний файл оправдан в двух случаях. Первый — настройка нужна до запуска 1С или вне неё (скрипт обновления, планировщик). Второй — одна и та же настройка нужна нескольким разным базам.

Прочитать JSON-файл в 1С можно так:

Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("C:\Settings\exchange.json");
Настройки = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Настройки — структура, например Настройки.Каталог

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

Реестр Windows для настроек 1С-решения почти никогда не нужен. Встроенных методов работы с реестром в языке нет, только обход через COM, и такая настройка не переживёт перенос базы на Linux-сервер.

Отдельная база данных (своя таблица в SQL) имеет смысл только при интеграции, где внешняя система сама пишет параметры. Для настроек самой 1С это лишний слой: прямые запросы к таблицам базы в обход платформы не поддерживаются, а структура таблиц меняется при обновлении.

Какие файлы с настройками есть у самой платформы

Часть настроек платформа держит на диске, и их полезно знать при переносе рабочего места:

Файл или папкаГде лежитЧто хранит
ibases.v8i%APPDATA%\1C\1CEStart\Список баз в окне запуска
1cestart.cfg%APPDATA%\1C\1CEStart\Параметры стартера: общие списки баз, каталоги шаблонов
conf.cfg, logcfg.xmlпапка conf в каталоге установки платформыОбщие параметры платформы, техжурнал
srvinfoкаталог службы сервера 1СРеестр кластера, список баз кластера, сеансовые данные
Кэш конфигурации%APPDATA%\1C\1cv8\ и %LOCALAPPDATA%\1C\1cv8\Кэш метаданных, не настройки пользователя

Чистка кэша через параметр запуска /ClearCache или удаление папок кэша не сбрасывает настройки форм и отчётов. Они в базе, а не в кэше.

Конфигурация или данные: где должна жить настройка

Частая ошибка — путать «настройку конфигурации» и «настройку базы».

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

Уровень базы данных — константы, регистры, справочники. Их меняет администратор или пользователь в режиме 1С:Предприятие, без Конфигуратора.

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

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

В типовых решениях общие настройки базы уже вынесены в интерфейс. В 1С:Бухгалтерии 3.0 это раздел Администрирование: функциональные опции включаются в Администрирование → Функциональность, параметры учёта — в соседних пунктах того же раздела. Значения пишутся в константы, менять их через код или обработки не нужно.

Что за настройку вы хотите сохранить?

Настройки интеграций, API и обменов

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

Открытые параметры — адрес, порт, имя пользователя, интервал выгрузки. Их кладут в константы или в справочник «Подключения», если сервисов несколько. Так администратор видит и меняет их без программиста.

Секреты — пароли, токены, закрытые ключи. В обычной константе их видит любой, у кого есть право чтения константы, и они уходят во все выгрузки и отчёты. Для секретов в БСП есть безопасное хранилище:

УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СсылкаНаПодключение, Токен, "Токен");
УстановитьПривилегированныйРежим(Ложь);

Чтение — симметрично, через ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(СсылкаНаПодключение, "Токен"). Оба вызова только на сервере. Владелец — ссылка на объект, к которому относится секрет, например элемент справочника подключений.

Главная ловушка — копия базы

Константа с адресом боевого API копируется вместе с базой. Тестовая копия начнёт отправлять данные в рабочий сервис: заказы, чеки, документы в ЭДО.

Что помогает:

  1. В БСП при смене пути к базе срабатывает проверка перемещения. Программа предлагает заблокировать работу с внешними ресурсами, и регламентные задания обмена не стартуют, пока администратор не подтвердит, что это рабочая база.
  2. Свои регламентные задания интеграции делайте зависимыми от этой блокировки, а не запускайте безусловно.
  3. Сразу после разворачивания копии меняйте адреса и учётные данные на тестовые.

Никогда не подтверждайте «это основная база» в тестовой копии. Иначе блокировка снимется, и обмены пойдут в бой.

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

Что попадает в выгрузку .dt и в бэкап СУБД, а что нет — от этого зависит, что потеряется при переезде.

Где хранитсяПопадает в .dt и бэкап базыКак переносить отдельно
Константы, регистры, справочникиДаЧерез обмен данными или выгрузку объектов
Хранилища настроек пользователейДаКопированием настроек между пользователями
Безопасное хранилище БСПДаТолько вместе с базой
ibases.v8i, 1cestart.cfgНетКопировать файлы или настроить общий список баз
Внешние файлы настроекНетВключить папку в свою схему резервного копирования
Настройки кластера (srvinfo)НетКопия каталога при остановленной службе

Копировать каталог srvinfo можно только при остановленной службе агента сервера 1С. Остановка службы обрывает сеансы всех пользователей, поэтому делайте это вне рабочего времени и предупредите людей заранее.

Копирование настроек между пользователями

В конфигурациях на БСП настройки одного пользователя можно скопировать другому. В 1С:Бухгалтерии 3.0 путь Администрирование → Настройки пользователей и прав → Настройки пользователей. Там выбирают пользователя и действие: скопировать настройки, очистить или посмотреть, что сохранено.

Так удобно настроить одного «эталонного» бухгалтера и раздать его рабочий стол и отчёты новым сотрудникам. Копировать можно выборочно: только внешний вид, только настройки отчётов.

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

Ошибки, из-за которых настройки теряются или ломаются

  • ❌ Путь или адрес зашит в код. Любая смена сервера требует правки конфигурации. Вынесите значение в константу.
  • ❌ Пароль в обычной константе или в реквизите справочника. Он виден в отчётах и уходит в каждую выгрузку. Переложите в безопасное хранилище.
  • ❌ Настройка в файле на компьютере пользователя, а читает её серверный код. В файловой базе работает, после перехода на клиент-сервер — нет.
  • ❌ Один ключ объекта в нескольких обработках. Обработки перезаписывают настройки друг друга. Используйте полное имя объекта метаданных как ключ.
  • ❌ Очистка кэша как способ сбросить «сломанную» форму. Кэш тут ни при чём. Сбросьте настройки формы в ней самой: Ещё → Изменить форму, затем вернуть стандартные настройки. Или очистите настройки пользователя через Настройки пользователей.
  • ❌ Новая константа прямо в типовой конфигурации. Каждое обновление превращается в сравнение и объединение. Расширение решает задачу чище.

Частые вопросы

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