Как перенести пользовательские настройки форм между базами 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Где физически хранятся настройки форм в 1С?

Для начала проанализируем архитектуру платформы в части хранения персональных настроек. Все изменения, которые пользователь вносит в интерфейс через меню «Изменить форму» или настройки динамических списков, сохраняются не в файлах конфигурации, а непосредственно в таблицах базы данных (СУБД). Доступ к этим данным на программном уровне предоставляется через специализированные системные хранилища настроек платформы:

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

Каждая запись в этих хранилищах однозначно идентифицируется комбинацией ключа объекта (например, имя формы), ключа настройки и имени конкретного пользователя информационной базы.

Типовой механизм БСП: Копирование настроек внутри одной базы

Прежде чем переходить к переносу между базами, рассмотрим ситуацию, когда настройки уже находятся в целевой базе, но их нужно быстро растиражировать по другим пользователям. В конфигурациях, использующих Библиотеку стандартных подсистем (БСП) — таких как ERP, УТ, КА, УНФ или Бухгалтерия предприятия, — предусмотрен готовый интерактивный инструмент.

Разберем по шагам, как им воспользоваться:

  1. Перейдем в раздел Администрирование, затем выберем пункт Настройки пользователей и прав.
  2. Откроем ссылку «Копирование настроек» в подразделе персональных настроек.
  3. В появившемся окне в качестве источника выберем пользователя-«донора», который уже настроил форму под себя.
  4. Установим переключатель в положение «Отдельные настройки». В открывшемся дереве найдем нужный документ или справочник и выделим конкретную форму флажком.
  5. На следующем шаге выберем одного или нескольких пользователей-получателей и нажмем кнопку «Скопировать».

Этот способ незаменим внутри одной базы. Однако он не позволяет напрямую выгрузить настройки во внешний файл для импорта в другую базу данных. Для решения этой проблемы нам потребуется программный код или внешняя обработка.

Программный перенос настроек между базами данных

Выясним, как написать собственный скрипт или внешнюю обработку для экспорта настроек из базы-источника в файл и их последующего импорта в базу-приемник. Весь процесс сводится к чтению данных из системного хранилища, их сериализации во внешний формат (например, XML или внутреннюю строку 1С) и последующей записи в аналогичное хранилище в целевой базе.

Для уникальной идентификации формы документа используется строковый ключ следующего вида: "Документ.ИмяДокумента.Форма.ФормаДокумента".

Шаг 1: Выгрузка настроек в базе-источнике

Рассмотрим пример кода, который выполняется на стороне базы-источника (например, тестовой копии). Задача кода — получить настройки конкретной формы для определенного пользователя и сериализовать их в XML-файл:


// Определяем параметры выгрузки
КлючОбъекта = "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента";
ИмяПользователяИсточника = "ИвановИИ";
ПутьКФайлу = "C:\Temp\form_settings.xml";

// Читаем список всех сохраненных настроек для данной формы
СписокНастроек = ХранилищеНастроекДанныхФорм.ПолучитьСписок(КлючОбъекта, ИмяПользователяИсточника);

Если СписокНастроек.Количество() > 0 Тогда
    // Создаем структуру для хранения экспортируемых данных
    ДанныеЭкспорта = Новый Структура;
    
    Для Каждого ЭлементСписка Из СписокНастроек Цикл
        ИмяНастройки = ЭлементСписка.Значение;
        // Извлекаем непосредственно сам объект настройки
        Настройка = ХранилищеНастроекДанныхФорм.Получить(КлючОбъекта, ИмяНастройки, , ИмяПользователяИсточника);
        
        Если Настройка <> Неопределено Тогда
            ДанныеЭкспорта.Вставить(ИмяНастройки, Настройка);
        КонецЕсли;
    КонецЦикла;
    
    // Сериализуем полученную структуру в XML-файл
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ПутьКФайлу);
    ЗаписатьXML(ЗаписьXML, ДанныеЭкспорта);
    ЗаписьXML.Закрыть();
    
    Сообщить("Настройки формы успешно выгружены в файл: " + ПутьКФайлу);
Иначе
    Сообщить("Настройки для указанной формы и пользователя не найдены!");
EndIf;

Шаг 2: Загрузка настроек в базе-приемнике

Теперь проанализируем код, который необходимо запустить в рабочей базе данных для загрузки сохраненного XML-файла и применения настроек к целевому пользователю:


// Определяем параметры загрузки
КлючОбъекта = "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента";
ИмяПользователяПриемника = "ПетровПП";
ПутьКФайлу = "C:\Temp\form_settings.xml";

ФайлНаДиске = Новый Файл(ПутьКФайлу);
Если Не ФайлНаДиске.Существует() Тогда
    ВызватьИсключение "Файл с настройками не найден на диске!";
КонецЕсли;

// Читаем сериализованные данные из XML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
ДанныеИмпорта = ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();

Если ТипЗнч(ДанныеИмпорта) = Тип("Структура") Тогда
    // Записываем настройки в системное хранилище базы-приемника
    Для Каждого КлючИЗначение Из ДанныеИмпорта Цикл
        ИмяНастройки = КлючИЗначение.Ключ;
        Настройка = КлючИЗначение.Значение;
        
        // Сохраняем настройку для целевого пользователя
        ХранилищеНастроекДанныхФорм.Сохранить(
            КлючОбъекта, 
            ИмяНастройки, 
            Настройка, 
            , 
            ИмяПользователяПриемника
        );
    КонецЦикла;
    
    Сообщить("Настройки формы успешно применены для пользователя: " + ИмяПользователяПриемника);
Иначе
    Сообщить("Некорректный формат файла настроек!");
КонецЕсли;

Особенности локального кэша и файлов .pfl

Важно упомянуть еще один аспект хранения настроек в платформе 1С. Некоторые параметры (например, точные геометрические размеры окон, их положение на экране монитора, история последних введенных значений) сохраняются не в базе данных, а на компьютере пользователя локально — в каталоге %USERPROFILE%\AppData\Local\1C\1Cv8\... в файлах с расширением .pfl.

Важный момент: Мы настоятельно не рекомендуем пытаться переносить настройки интерфейса путем простого копирования этих файлов кэша. Во-первых, структура кэша привязана к уникальному идентификатору (UID) конкретной информационной базы. Во-вторых, ручное копирование служебных файлов платформы может привести к нестабильной работе интерфейса. Для надежного переноса конфигурации форм (измененных через визуальный редактор) всегда следует использовать описанный выше программный метод работы с СУБД-хранилищами.

Резюме и рекомендации

Мы рассмотрели устройство механизмов сохранения интерфейса и разработали универсальный способ переноса настроек форм. При решении этой задачи на практике рекомендуем придерживаться следующих правил:

← На главную