1с скд восстановить настройки
1) Появилось задание создать отчёт.
2) Отчёт сделан. Пользователь зашёл. В условном оформление, например, что то изменил. И сохранил настройки.
3) Далее появилась необходимость переделать отчёт.
4) Отчёт переделан. Тех полей что были раньше возможно уж нет. Пользовательские настройки идут в конфликт с текущим отчётом и отчёт валиться.
Есть ли возможность скинуть пользовательские настройки у всех пользователей?
Спасибо
Да но тогда каждый раз как отчёт открываеш он будет сбрасывать настройки. А нужно только тогда когда отчёт изменял программист.
Всё не то.
Эти настройки насколько мне известно не в кеше храняться а на локале. и всё сбрасывать мне не надо. А только настройки конкретного отчёта. Плюс не у одного пользователя, а у всех сразу
Открыл отчёт сохранил настройку. Проверил что настройка сохранилась, открытием заново отчёта. Захожу в РС Сохранённые настройки. И там нет строки где пользователь я, для этого отчёта. Этого отчёта там вообще нет. Значит где то в другом месте сохраняется.
Отчёт на базе СКД, никакого кода дополнительного для сохранения настроек не писалось, все кнопки штатные.
Восстановить (Refresh)
Синтаксис:
Тип: СпособВосстановленияНастроекКомпоновкиДанных.
Указывает способ восстановления настроек.
Значение по умолчанию: Полное
Описание:
Восстанавливает работоспособность настроек. В случае если был изменен источник доступных настроек, часть полей, использованных в настройках, может потерять связь с доступными полями. При использовании таких настроек в компоновке данных произойдет ошибка.
Вызов метода с параметром = Полное:
снимает признак использования у всех элементов настроек, потерявших связь с доступными полями;
в случае, если при работе метода у оформляемого поля условного оформления снят признак использования и в оформляемых полях этого элемента условного оформления отсутствуют оформляемые поля с установленным свойством использования, то признак использования отключается и у самого элемента оформления;
в случае если при работе метода у элемента отбора, находящегося в группе, отключается признак использования, и в группе отсутствуют элементы с установленным признаком использования, признак использования отключается у всей группы.
И, таким образом, работоспособность настроек восстанавливается.
Вызов метода с параметром = ПроверятьДоступность:
удалит из настроек все элементы, которые содержат поля, недоступные для текущих функциональных опций и прав.
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Задача: нужно хранить настройки отчета на СКД в базе, причем у каждого поль зователя должно быть произвольное количество настроек.
Для хранения настроек отчетов в УПП существуют два метаданных. Регистр сведений "Сохраненные настройки" и одноименный справочник.
Их структура похожа, в обоих есть информация:
- О пользователе, который может использовать данную настройку
- "СохранятьАвтоматически" - сохранять настройку при закрытии
- "ИспользоватьПриОткрытии" - при открытии будет выведен отчет по настройке с данной галочкой. Галочка может стоять только у одной настройки к каждому отчету. Если ни у одной настройки галочки нет, то будет выведена типовая настройка СКД.
- Реквизит с типом "Хранилище значения" (в справочнике реквизит "ХранилищеНастроек", в регистре сведений ресурс "СохраненнаяНастройка"). В данном объекте собсвенно и хранятся настройки. Как известно хранилище значения может хранить любое значение.
В регистре сведений хранятся настройки для отчетов, построенных на универсальном отчете, в справочнике - построенных на СКД. Логично сохранять настройки в справочнике. Но после беглого взгляда возникает несколько но:
- Данный справочник содержит предопределенные элементы, имя которых совпадает с именами отчетов. Свои же отчеты туда добавить нельзя, так как в результате обновления может возникнуть коллизия, 1с добавит новые элементы и в тоже время будут существовать предопределенные элементы, добавленные пользователем.
- Справочник заточен на работу с шаблоном отчета 1с, и процедуры и функции работы с сохранением настроек выдрать из него достаточно сложно.
Регистр сведений. Как говорилось выше - в нем хранятся настройки для отчетов на универсальном отчете. Но просмотрев механизм, я решил использовать его, так как процедуры работы с сохранением и восстановлением настроек взять гораздо проще, и более того, данный механизм использован не только в отчетах, но и в типовой обработке "Универсальный журнал", код из которой, немного изменив, я и приспоспособил для решения данной задачи.
Итак. На форму надо добавить кнопки сохранения и восстановления значений настроек , добавить процедуры к ним, и написать код в процедуры "ПриОткрытии" и "ПриЗакрытии".
Процедура ДействияФормыСохранитьНастройки ( Кнопка )
Если мТекущаяНастройка <>Неопределено Тогда
СтруктураНастройки = мТекущаяНастройка ;
Иначе
СтруктураНастройки = Новый Структура ;
СтруктураНастройки . Вставить ( "ИмяОбъекта" , Строка ( ЭтотОбъект ));
СтруктураНастройки . Вставить ( "НаименованиеНастройки" , Неопределено);
СтруктураНастройки . Вставить ( "ИспользоватьПриОткрытии" , Ложь);
СтруктураНастройки . Вставить ( "СохранятьАвтоматически" , Ложь);
КонецЕсли;
СтруктураНастройки . Вставить ( "Пользователь" , глЗначениеПеременной ( "глТекущийПользователь" ));
СохраненнаяНастройка = Новый ХранилищеЗначения ( КомпоновщикНастроек . ПолучитьНастройки ());
СтруктураНастройки . Вставить ( "СохраненнаяНастройка" , СохраненнаяНастройка );
ВозвращаемаяСтруктура = УниверсальныеМеханизмы . СохранениеНастроек ( СтруктураНастройки );
Если ВозвращаемаяСтруктура <> Неопределено Тогда
мТекущаяНастройка = ВозвращаемаяСтруктура ;
Иначе
мТекущаяНастройка = СтруктураНастройки ;
КонецЕсли;
Процедура ДействияФормыВосстановитьНастройки ( Кнопка )
СтруктураНастройки = Новый Структура ;
СтруктураНастройки . Вставить ( "Пользователь" , глЗначениеПеременной ( "глТекущийПользователь" ));
СтруктураНастройки . Вставить ( "ИмяОбъекта" , Строка ( ЭтотОбъект ));
СтруктураНастройки . Вставить ( "НаименованиеНастройки" , ?( мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка . НаименованиеНастройки ));
ВозвращаемаяСтруктура = УниверсальныеМеханизмы . ВосстановлениеНастроек ( СтруктураНастройки );
Если ВозвращаемаяСтруктура <> Неопределено Тогда
мТекущаяНастройка = ВозвращаемаяСтруктура ;
КомпоновщикНастроек . ЗагрузитьНастройки ( мТекущаяНастройка . СохраненнаяНастройка . Получить ());
КонецЕсли;
Процедура ПриОткрытии ()
СтруктураНастройки = Новый Структура ;
СтруктураНастройки . Вставить ( "Пользователь" , глЗначениеПеременной ( "глТекущийПользователь" ));
СтруктураНастройки . Вставить ( "ИмяОбъекта" , Строка ( ЭтотОбъект ));
Если УниверсальныеМеханизмы . ПолучитьНастройкуИспользоватьПриОткрытии ( СтруктураНастройки ) Тогда
мТекущаяНастройка = СтруктураНастройки ;
КомпоновщикНастроек . ЗагрузитьНастройки ( мТекущаяНастройка . СохраненнаяНастройка . Получить ());
Иначе
//установка первоначальных настроек, например периода и т.д.
КонецЕсли;
КонецПроцедуры
Если мТекущаяНастройка <> Неопределено И мТекущаяНастройка . НаименованиеНастройки <> Неопределено
И мТекущаяНастройка . Свойство ( "СохранятьАвтоматически" ) И мТекущаяНастройка . СохранятьАвтоматически Тогда
ТекПользователь = глЗначениеПеременной ( "глТекущийПользователь" );
Если ТекПользователь <> мТекущаяНастройка . Пользователь Тогда
Ответ = Вопрос ( "Вы восстановили настройку другого пользователя, сохранить ее в
|ваших настройках?" , РежимДиалогаВопрос . ДаНет );
Если Ответ = КодВозвратаДиалога . Да Тогда
Если ВвестиСтроку ( мТекущаяНастройка . НаименованиеНастройки ,
"Укажите наименование сохраняемой настройки" ) Тогда
мТекущаяНастройка . Пользователь = ТекПользователь ;
УниверсальныеМеханизмы . СохранитьНастройку ( мТекущаяНастройка );
КонецЕсли;
КонецЕсли;
Иначе
УниверсальныеМеханизмы . СохранитьНастройку ( мТекущаяНастройка );
КонецЕсли;
КонецЕсли;
Данный, достаточно небольшой код, позволяет сохранять и восстанавливать настройки внешнего отчета на СКД.
Во многих источниках в качестве примера программного выполнения СКД в обработке (не отчете) приводится код, который обладает одним существенным недочетом, который ограничивает его функциональность. В данной публикации приведен код с исправлением этого недочета.
Сам недочет заключается в том, что в коде не используется КомпоновщикНастроекКомпоновкиДанных, что не позволяет нормально работать со настройками СКД. В частности, недоступна (без извращений или лишнего кода) установка параметров.
А вот бонусом программное восстановление значений полей из настроек для управляемой формы
Специальные предложения
Какие-то мне неправильные примеры попадались)
PS:
Шрифт кода сделать побольше нужно.
Ну и показать, в чем недостаток того метода, который "неправильный"
(2) вот например по гуглу первые ссылки (касается только кода, которые годится для обработок, т.к. в если брать отчет, но компоновщик настроек там уже есть)
Шрифт кода предоставлен порталом infostart (:
Недостаток один, но очень существенный - отсутствие компоновщика настроек. Без этого нормальной работы с настройками не получится.
Хм. Не знаю, о каких примерах речь. Сам всегда делал именно как описывает автор.
Что мне особо нравится, компоновщик можно использовать в значительном "отрыве" от его СКД, а иногда и вовсе без.
(7) почему же. Подойдет. Только в отчете уже есть компоновщик настроек и отдельно его создавать не надо.
Спасибо, два часа мозг рвал СКД. И еще неизвестно сколько рвал бы без строчки КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Я-то простая душа, думал: раз инициализируем используя схему, то настройки схемы и так должны быть. Блин. В СП по СКД все свалено в кучу, 100500 советов, не знаешь уже куда бежать.
Спасибо за статью! Возник вопрос: как вывести скд с группировками в дерево значений? Вывод в дерево сделал, а вторые и третьи уровни "неопределено"?
- так лучше, позволит в СКД использовать экспортные функции общих модулей, и некоторые функции глобального контекста
Было бы классно, если бы к этому коду приделали использование макета из СКД. А то тот макет что создается по умолчанию слишком убогий.
Просмотры 96075
Загрузки 0
Рейтинг 203
Создание 29.01.14 17:18
Обновление 29.01.14 17:18
№ Публикации 255063
Рубрики СКД
Тип файла Нет файла
Конфигурация Конфигурации 1cv8
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано
См. также
Как просто запомнить алгоритм программного вывода в СКД Промо
Порой нужно быстро вывести на экран таблицу значений, используя СКД \ получить данные отчета в таблицу значений.. Несмотря на очевидность алгоритма - раньше мне проще было загуглить программный вывод, благо эта инфа есть везде. Но постепенно понял как его можно быстро вспомнить, и лишний раз ничего не искать. Конечно эта статья не для Гуру :) Но я думаю - что любой неопытный в СКД программист сделает для себя небольшое открытие.
01.09.2017 55141 unichkin 19
КУ! или Нарезка графика продолжается
23.04.2022 397 AnatolPopov 0
Нарезка графика ломтями
Как в СКД простыми средствами улучшить отображение графика, которому слишком тесно на шкале. Проверено в версии 8.3.13.1644.
09.04.2022 581 AnatolPopov 0
Убираем параметры из отбора СКД
Заметка о некоторых технических нюансах параметров данных и отборов СКД.
17.02.2022 2679 Yashazz 28
Полезности применения СКД Промо
Нюансы при работе из СКД на программном уровне.
11.04.2012 53124 logarifm 42
Отладка СКД
На митапе «Практика применения СКД» выступил ведущий разработчик 1С аутсорсинговой компании Programming Store Павел Шемякин. Павел рассказал, как бороться с нежелательной «оптимизацией» запроса СКД, какие инструменты для отладки СКД можно использовать – в чем их отличия и преимущества, и показал, как работать с консолью компоновки данных – на какие элементы структуры XML-файла макета СКД обращать внимание при поиске причин неправильной работы отчета.
08.02.2022 4586 ProfessionStore 2
Программная работа и компоненты СКД
На митапе «Практика применения СКД» выступил архитектор Digital Business Петр Базелюк. Он рассказал о том, как работать с СКД программно, и как, используя общедоступную библиотеку FoxyLink, создать свой процессор вывода результата СКД напрямую в формат JSON или в CSV.
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).
суббота, 21 декабря 2013 г.
Сохранение/восстановление отборов СКД в регистр "Сохраненные настройки"
В продолжение статьи Выгрузка результата СКД в таблицу значений рассмотрим, как установить отбор для созданной нами СКД, а также сохранять и восстанавливать настройки отбора и периода.
Для сохранения будут использоваться стандартные процедуры, которые применяются в отчетах в толстом клиенте (регистр сведений "Сохраненные настройки").
1) Для начала добавим в обработку реквизит "НастройкаОтбора" - тип "Строка", неограниченной длины. В этом реквизите и будет храниться наш отбор. Сохранять отбор будем с помощью функции сохранения значений ЗначениеВСтрокуВнутр(), а восстанавливать - ЗначениеИзСтрокиВнутр().
3) Откроем форму выберем пункт меню "Форма" - "Вставить элемент управления. " и добавим табличную часть "НастройкаОтбора" вместе с командной панелью.
4) Откроем свойства табличной части и в поле "Данные" выберем тип "КомпоновщикНастроек.Настройки.Отбор". Табличная часть примет вид как на рисунке ниже.
На панели формы создадим две кнопки "Сохранить" и "Восстановить настройки", а в модуле формы определим такой код:
Перем СКД ;
Перем мТекущаяНастройка ;
Процедура КнопкаВыполнитьНажатие ( Кнопка )
Продажи . Загрузить ( РезультатКомпоновкиВТЗ ( СКД , КомпоновщикНастроек ));
Процедура ПередОткрытием ( Отказ , СтандартнаяОбработка )
СохраненнаяНастройка = ?( ЗначениеЗаполнено ( НастройкаОтбора ), ЗначениеИзСтрокиВнутр ( НастройкаОтбора ),Неопределено);
КомпоновщикНастроек . Инициализировать (Новый ИсточникДоступныхНастроекКомпоновкиДанных ( СКД ));
Настройки = ?(НЕ СохраненнаяНастройка = Неопределено, СохраненнаяНастройка , СКД . НастройкиПоУмолчанию );
КомпоновщикНастроек . ЗагрузитьНастройки ( Настройки );
// Процедура восстановления сохраненных настроек
//
Процедура ВосстановитьНастройки () Экспорт
СтруктураНастройки = Новый Структура ;
СтруктураНастройки . Вставить ( "Пользователь" , глЗначениеПеременной ( "глТекущийПользователь" ));
СтруктураНастройки . Вставить ( "ИмяОбъекта" , Строка ( ЭтотОбъект ));
СтруктураНастройки . Вставить ( "НаименованиеНастройки" , ?( мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка . НаименованиеНастройки ));
Результат = УниверсальныеМеханизмы . ВосстановлениеНастроек ( СтруктураНастройки );
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат ;
ВосстановитьНастройкиИзСтруктуры ( Результат . СохраненнаяНастройка );
// Процедура сохранения настроек
//
Процедура СохранитьНастройки () Экспорт
СтруктураНастройки = Новый Структура ;
СтруктураНастройки . Вставить ( "Пользователь" , глЗначениеПеременной ( "глТекущийПользователь" ));
СтруктураНастройки . Вставить ( "ИмяОбъекта" , Строка ( ЭтотОбъект ));
СтруктураНастройки . Вставить ( "НаименованиеНастройки" , ?( мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка . НаименованиеНастройки ));
СтруктураНастройки . Вставить ( "СохраненнаяНастройка" , СохраненнаяНастройка );
СтруктураНастройки . Вставить ( "ИспользоватьПриОткрытии" , Ложь);
СтруктураНастройки . Вставить ( "СохранятьАвтоматически" , Ложь);
Результат = УниверсальныеМеханизмы . СохранениеНастроек ( СтруктураНастройки );
Если Результат <> Неопределено Тогда
мТекущаяНастройка = Результат ;
Иначе
мТекущаяНастройка = СтруктураНастройки ;
КонецЕсли;
// Процедура восстановления значений реквизитов
//
Процедура ВосстановитьНастройкиИзСтруктуры ( СтруктураСНастройками ) Экспорт
Если ТипЗнч ( СтруктураСНастройками ) <> Тип ( "Структура" ) Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств ( ЭтотОбъект , СтруктураСНастройками );
ЗагрузитьНастройкуОтбора ();
// Процедура сохранения значений реквизитов
//
Процедура СформироватьСтруктуруДляСохраненияНастроек ( СтруктураСНастройками ) Экспорт
Если ТипЗнч ( СтруктураСНастройками ) <> Тип ( "Структура" ) Тогда
СтруктураСНастройками = Новый Структура ;
КонецЕсли;
СтруктураСНастройками . Вставить ( "НастройкаОтбора" , ЗначениеВСтрокуВнутр ( КомпоновщикНастроек . Настройки ));
СтруктураСНастройками . Вставить ( "НачалоПериода" , НачалоПериода );
СтруктураСНастройками . Вставить ( "КонецПериода" , КонецПериода );
Процедура ДействияФормыСохранитьНастройки ( Кнопка )
Процедура ДействияФормыВосстановитьНастройки ( Кнопка )
СКД = ПолучитьМакет ( "ПродажиЗаПериод" );
Функция РезультатКомпоновкиВТЗ ( СКД , КомпоновщикНастроек ) Экспорт
НастройкиКомпоновщика = КомпоновщикНастроек . Настройки ;
ПараметрыНастройки = НастройкиКомпоновщика . ПараметрыДанных ;
// устанавливаем параметры отчета
ЗначениеПараметра = ПараметрыНастройки . НайтиЗначениеПараметра (Новый ПараметрКомпоновкиДанных ( "НачалоПериода" ));
ЗначениеПараметра . Значение = НачалоПериода ;
ЗначениеПараметра = ПараметрыНастройки . НайтиЗначениеПараметра (Новый ПараметрКомпоновкиДанных ( "КонецПериода" ));
ЗначениеПараметра . Значение = КонецДня ( КонецПериода );
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных ;
МакетКомпоновкиДанных = КомпоновщикМакета . Выполнить ( СКД , НастройкиКомпоновщика . Тип ( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных ;
ПроцессорКомпоновкиДанных . Инициализировать ( МакетКомпоновкиДанных );
ТаблицаРезультат = Новый ТаблицаЗначений ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений ;
ПроцессорВывода . УстановитьОбъект ( ТаблицаРезультат );
ПроцессорВывода . Вывести ( ПроцессорКомпоновкиДанных );
6) После запуска обработки можно установить параметры: начало и конец периода, а также определить отбор. Потом сохранить настройку. При последующей работе можно вернуться к этой настройке нажав кнопку восстановления настроек. Как это сделать показано на скриншоте.
Пример обработки можно скачать ЗДЕСЬ.
sem_wolf Вопрос-ответ Ваш отзыв В закладки
Платформа 8.2 , обычное приложение. В отчете есть несколько схем СКД, на форме отчета в списке выбора пользователь сам выбирает нужную схему, помогите разобраться как сохранять/воостанавливать настройки схемы вместе с вариантом отчета. Настройки сохраняю в РС.СохраненныеНастройки. Проблема в том что я не понимаю как сохранить настройки СКД и значения реквизитов отчета вместе , получается только либо первое либо второе.
//Заполнение вариантов отчета
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Варианты = Новый СписокЗначений;
Макеты = ЭтотОбъект.Метаданные().Макеты;
Для Каждого Схема ИЗ Макеты Цикл
Варианты.Добавить(Схема.Имя,Схема.Синоним);
КонецЦикла;
ЭлементыФормы.СписокВариантов.СписокВыбора = Варианты;
КонецПроцедуры
//выбор варианта отчета
Процедура СписокВариантовПриИзменении(Элемент)
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет(Элемент.Значение);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецПроцедуры
Процедура ПриОткрытии()
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить(“Пользователь”, глЗначениеПеременной(“глТекущийПользователь”));
СтруктураНастройки.Вставить(“ИмяОбъекта”, Строка(ЭтотОбъект));
Если УниверсальныеМеханизмы.ПолучитьНастройкуИспользоватьПриОткрытии(СтруктураНастройки) Тогда
мТекущаяНастройка = СтруктураНастройки;
КомпоновщикНастроек.ЗагрузитьНастройки(мТекущаяНастройка.СохраненнаяНастройка.Получить());
КонецЕсли;
КонецПроцедуры
//переопределение стандартных кн Сохранить/Восстановить значения
Процедура СохранитьНастройки() Экспорт
Перем СохраненнаяНастройка;
Если мТекущаяНастройка<>Неопределено Тогда
СтруктураНастройки = мТекущаяНастройка;
Иначе
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить(“ИмяОбъекта”, Строка(ЭтотОбъект));
СтруктураНастройки.Вставить(“НаименованиеНастройки”, Неопределено);
СтруктураНастройки.Вставить(“ИспользоватьПриОткрытии”, Ложь);
СтруктураНастройки.Вставить(“СохранятьАвтоматически”, Ложь);
КонецЕсли;
СтруктураНастройки.Вставить(“Пользователь”, глЗначениеПеременной(“глТекущийПользователь”));
СохраненнаяНастройка = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки());
СтруктураНастройки.Вставить(“СохраненнаяНастройка”, СохраненнаяНастройка);
Если ВозвращаемаяСтруктура <> Неопределено Тогда
мТекущаяНастройка = ВозвращаемаяСтруктура;
Иначе
мТекущаяНастройка = СтруктураНастройки;
КонецЕсли;
Процедура ВосстановитьНастройки() Экспорт
СтруктураНастройки = Новый Структура;
СтруктураНастройки.Вставить(“Пользователь”, глЗначениеПеременной(“глТекущийПользователь”));
СтруктураНастройки.Вставить(“ИмяОбъекта”, Строка(ЭтотОбъект));
СтруктураНастройки.Вставить(“НаименованиеНастройки”, ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
Если ВозвращаемаяСтруктура <> Неопределено Тогда
мТекущаяНастройка = ВозвращаемаяСтруктура;
КомпоновщикНастроек.ЗагрузитьНастройки(мТекущаяНастройка.СохраненнаяНастройка.Получить());
КонецЕсли;
КонецПроцедуры
Читайте также: