Константа, регистр, хранилище или файл: куда положить настройку в 1С 8.3
Содержание
Общую настройку для всей базы храните в константе или регистре сведений, личную настройку пользователя — в ХранилищеОбщихНастроек, пароли и токены — в безопасном хранилище БСП. Внешние файлы и реестр Windows нужны только для того, что должно жить вне базы: список баз, параметры запуска, настройки сервера.
Вопрос встаёт, когда настройку уже положили «куда получилось». Путь к папке обмена зашит в коде, пароль от API лежит в обычной константе, а после копирования базы в тест она начинает слать данные в боевой сервис. Ниже — какое место подходит для какой настройки и почему. Механизмы общие для платформы 8.3 и не зависят от конфигурации, кроме мест, где речь о БСП.
Какие механизмы хранения настроек есть в платформе 1С
В платформе 1С:Предприятие 8.3 нет одного «места для настроек». Есть набор объектов, и у каждого своя задача.
- 📌 Константы — одно значение на всю базу. Путь к каталогу обмена, основная организация, флаг «использовать склады».
- 📌 Регистры сведений — набор значений с измерениями. Настройка «по организации», «по складу», «по периоду».
- 📌 Справочники — когда настроек много и у каждой есть свои реквизиты. Например, справочник подключений к внешним сервисам.
- 📌 Функциональные опции — включают и выключают части интерфейса. Значение хранится в константе или регистре, опция только читает его.
- 📌 Хранилища настроек — личные настройки пользователей: формы, отчёты, последние выбранные значения.
- 📌 Параметры сеанса — значения на время сеанса. После выхода пользователя они пропадают, для постоянного хранения не подходят.
Первые четыре варианта — данные базы, они общие для всех. Хранилища настроек привязаны к пользователю. Это главное различие, от него и стоит отталкиваться.
| Что за настройка | Где хранить | Почему |
|---|---|---|
| Одно значение на всю базу | Константа | Просто читать, видно в интерфейсе |
| Значение в разрезе организации, склада, даты | Регистр сведений | Есть измерения и периодичность |
| Много однотипных записей с реквизитами | Справочник | Удобно редактировать списком |
| Личный выбор пользователя | ХранилищеОбщихНастроек | Не мешает другим пользователям |
| Пароль, токен, секретный ключ | Безопасное хранилище БСП | Закрыто от обычного чтения |
| Параметры запуска, список баз | Файлы на компьютере пользователя | Нужны до входа в базу |
Пользовательские настройки форм и отчётов
Когда пользователь двигает колонки, меняет отбор или сохраняет вариант отчёта, платформа пишет это в стандартные хранилища. Их пять:
ХранилищеОбщихНастроек— произвольные настройки, которые разработчик сохраняет из кода.ХранилищеСистемныхНастроек— положение окон, состав командных панелей, расположение элементов формы.ХранилищеНастроекДанныхФорм— значения реквизитов формы, если у них включено сохранение.ХранилищеВариантовОтчетов— варианты отчётов, созданные пользователями.ХранилищеПользовательскихНастроекОтчетов— пользовательские настройки внутри варианта: отборы, периоды, группировки.
Все пять по умолчанию живут в служебных таблицах самой информационной базы. Не в профиле 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 копируется вместе с базой. Тестовая копия начнёт отправлять данные в рабочий сервис: заказы, чеки, документы в ЭДО.
Что помогает:
- В БСП при смене пути к базе срабатывает проверка перемещения. Программа предлагает заблокировать работу с внешними ресурсами, и регламентные задания обмена не стартуют, пока администратор не подтвердит, что это рабочая база.
- Свои регламентные задания интеграции делайте зависимыми от этой блокировки, а не запускайте безусловно.
- Сразу после разворачивания копии меняйте адреса и учётные данные на тестовые.
Никогда не подтверждайте «это основная база» в тестовой копии. Иначе блокировка снимется, и обмены пойдут в бой.
Резервное копирование и перенос настроек
Что попадает в выгрузку .dt и в бэкап СУБД, а что нет — от этого зависит, что потеряется при переезде.
| Где хранится | Попадает в .dt и бэкап базы | Как переносить отдельно |
|---|---|---|
| Константы, регистры, справочники | Да | Через обмен данными или выгрузку объектов |
| Хранилища настроек пользователей | Да | Копированием настроек между пользователями |
| Безопасное хранилище БСП | Да | Только вместе с базой |
ibases.v8i, 1cestart.cfg | Нет | Копировать файлы или настроить общий список баз |
| Внешние файлы настроек | Нет | Включить папку в свою схему резервного копирования |
Настройки кластера (srvinfo) | Нет | Копия каталога при остановленной службе |
Копировать каталог srvinfo можно только при остановленной службе агента сервера 1С. Остановка службы обрывает сеансы всех пользователей, поэтому делайте это вне рабочего времени и предупредите людей заранее.
Копирование настроек между пользователями
В конфигурациях на БСП настройки одного пользователя можно скопировать другому. В 1С:Бухгалтерии 3.0 путь Администрирование → Настройки пользователей и прав → Настройки пользователей. Там выбирают пользователя и действие: скопировать настройки, очистить или посмотреть, что сохранено.
Так удобно настроить одного «эталонного» бухгалтера и раздать его рабочий стол и отчёты новым сотрудникам. Копировать можно выборочно: только внешний вид, только настройки отчётов.
Синхронизировать настройки между разными базами штатного механизма нет. Варианты отчётов переносят через сохранение варианта в файл и загрузку в другой базе, константы — обработкой или обменом.
Ошибки, из-за которых настройки теряются или ломаются
- ❌ Путь или адрес зашит в код. Любая смена сервера требует правки конфигурации. Вынесите значение в константу.
- ❌ Пароль в обычной константе или в реквизите справочника. Он виден в отчётах и уходит в каждую выгрузку. Переложите в безопасное хранилище.
- ❌ Настройка в файле на компьютере пользователя, а читает её серверный код. В файловой базе работает, после перехода на клиент-сервер — нет.
- ❌ Один ключ объекта в нескольких обработках. Обработки перезаписывают настройки друг друга. Используйте полное имя объекта метаданных как ключ.
- ❌ Очистка кэша как способ сбросить «сломанную» форму. Кэш тут ни при чём. Сбросьте настройки формы в ней самой:
Ещё → Изменить форму, затем вернуть стандартные настройки. Или очистите настройки пользователя черезНастройки пользователей. - ❌ Новая константа прямо в типовой конфигурации. Каждое обновление превращается в сравнение и объединение. Расширение решает задачу чище.
Частые вопросы
Где физически лежат пользовательские настройки 1С 8.3?
1Cv8.1CD у файловой базы или в базе СУБД у клиент-серверной. В профиле Windows их нет.Сохранятся ли настройки пользователя после обновления конфигурации?
Можно ли посмотреть, что сохранено в ХранилищеОбщихНастроек?
ПолучитьСписок с ключом объекта — он вернёт список сохранённых ключей настроек. В конфигурациях на БСП то же видно в форме «Настройки пользователей».