Имя: Пароль:
1C
1С v8
СКД: массово применить стандартные настройки
0 Nicole
 
08.08.25
18:20
Есть отчет на СКД, использующий типовую общую ФормуОтчета СтандартноеХранилищеНастроек. В качестве одного из параметров  СКД выступает список значений. Меняется схема СКД, и из этого списка значений удаляются два элемента. Что имеем: пользователи открывают отчет, хотят установить параметр и видят старый список значений, из которого элементы еще не удалены. Для одного пользователя ситуация решается пунктом меню Еще - Стандартные настройки.
Есть возможность программно применить этот пункт для всех пользователей?
1 craxx
 
08.08.25
20:20
(1) конфа на БСП, я надеюсь?
2 Волшебник
 
08.08.25
21:34
(0) Снесите все сохранённые настройки у пользователей
3 Franchiser
 
гуру
09.08.25
13:22
В 1C:Enterprise 8 для программного применения стандартных настроек системы компоновки данных (СКД) ко всем пользователям можно использовать несколько подходов:

## 1. Использование хранилища общих настроек

```1c
// В модуле отчета или общем модуле
Процедура УстановитьСтандартныеНастройкиДляВсехПользователей(ИмяОтчета, КлючВарианта = "Основной")
    
    // Получаем стандартные настройки
    СтандартныеНастройки = ПолучитьСтандартныеНастройкиСКД();
    
    // Устанавливаем как настройки по умолчанию
    ХранилищеОбщихНастроек.Сохранить(
        "НастройкиОтчетов/" + ИмяОтчета,
        КлючВарианта + "/КомпоновщикНастроек/ПользовательскиеНастройки",
        СтандартныеНастройки.ПользовательскиеНастройки,
        НастройкиОписанияОбъекта(),
        "Общие"
    );
    
КонецПроцедуры

Функция ПолучитьСтандартныеНастройкиСКД()
    
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    
    // Настраиваем стандартные параметры
    КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
    КомпоновщикНастроек.Настройки.Порядок.Элементы.Очистить();
    
    // Добавляем нужные отборы
    ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементОтбора.ПравоеЗначение = НачалоГода(ТекущаяДата());
    ЭлементОтбора.Использование = Истина;
    
    Возврат КомпоновщикНастроек;
    
КонецФункции
```

## 2. Установка через обработчик при открытии отчета

```1c
// В модуле формы отчета
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем, есть ли уже пользовательские настройки
    Если НЕ ЕстьПользовательскиеНастройки() Тогда
        УстановитьСтандартныеНастройки();
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Функция ЕстьПользовательскиеНастройки()
    
    КлючНастроек = "Отчет." + ИмяФормы + "/ФормаОтчета";
    
    Настройки = ХранилищеСистемныхНастроек.Загрузить(
        КлючНастроек,
        "КомпоновщикНастроек"
    );
    
    Возврат Настройки <> Неопределено;
    
КонецФункции

&НаСервере
Процедура УстановитьСтандартныеНастройки()
    
    // Создаем стандартные настройки
    СтандартныеНастройки = Новый НастройкиКомпоновкиДанных;
    
    // Настраиваем отбор по периоду
    ЭлементОтбора = СтандартныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатаДокумента");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВПериоде;
    ЭлементОтбора.ПравоеЗначение = Новый СтандартныйПериод(СтандартныйПериодВариант.ТекущийМесяц);
    ЭлементОтбора.Использование = Истина;
    
    // Применяем настройки к компоновщику
    КомпоновщикНастроек.ЗагрузитьНастройки(СтандартныеНастройки);
    
КонецПроцедуры
```

## 3. Массовая установка для всех пользователей

```1c
// Обработка для массовой установки настроек
Процедура УстановитьНастройкиДляВсехПользователей() Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Пользователи.Ссылка КАК Пользователь
    |ИЗ
    |    Справочник.Пользователи КАК Пользователи
    |ГДЕ
    |    НЕ Пользователи.ПометкаУдаления";
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        УстановитьНастройкиДляПользователя(Выборка.Пользователь);
    КонецЦикла;
    
КонецПроцедуры

Процедура УстановитьНастройкиДляПользователя(Пользователь)
    
    // Формируем ключ настроек для конкретного пользователя
    КлючНастроек = "Отчет.НазваниеОтчета/ФормаОтчета";
    
    // Создаем стандартные настройки
    НастройкиСКД = СоздатьСтандартныеНастройкиСКД();
    
    // Сохраняем настройки для пользователя
    ХранилищеСистемныхНастроек.Сохранить(
        КлючНастроек,
        "КомпоновщикНастроек/ПользовательскиеНастройки",
        НастройкиСКД.ПользовательскиеНастройки,
        ,
        Пользователь
    );
    
КонецПроцедуры
```

## 4. Установка через варианты отчетов

```1c
// В модуле менеджера отчета
Процедура НастроитьВариантыОтчетов(Настройки) Экспорт
    
    ОписаниеОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.НазваниеОтчета);
    ОписаниеОтчета.ОпределитьНастройкиФормы = Истина;
    
    ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, ОписаниеОтчета, "СтандартныйВариант");
    ОписаниеВарианта.Описание = "Стандартные настройки отчета";
    ОписаниеВарианта.ПоУмолчанию = Истина;
    
КонецПроцедуры

// В модуле формы отчета
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ВариантыОтчетов.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
    
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // Применяем стандартные настройки, если вариант стандартный
    Если ТекущийВариант = "СтандартныйВариант" Тогда
        ПрименитьСтандартныеНастройки();
    КонецЕсли;
    
КонецПроцедуры
```

## Рекомендации:

1. **Для новых пользователей** - используйте первый подход с хранилищем общих настроек
2. **Для существующих пользователей** - массовая обработка (подход 3)
3. **Для управления вариантами** - четвертый подход через подсистему "Варианты отчетов"
4. **Обязательно тестируйте** настройки перед массовым применением
5. **Делайте резервные копии** настроек перед изменениями

Выбор конкретного метода зависит от версии платформы, используемых подсистем и требований к управлению настройками.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан