Меню

Динамический список сохранение настроек



Сохранение настроек динамического списка (несколько)

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

Как связать звено элемента динамического списка с выбранным элементом из списка?
как связать звено элемента динамического списка с выбранным элементом из списка в коде? .

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

Сохранение настроек.
Есть много чекбоксов. Как можно сохранить у файл или инифайл то, отмечен ли каждый чекбокс.

ЛюбознательнаяЯ, Что-то код непонятный. Не разбирался конкретно, но в СП заглянул — абсолютно не то.

СтандартноеХранилищеНастроекМенеджер (StandardSettingsStorageManager)
ПолучитьСписок (GetList)
Синтаксис:

Тип: Строка.
Ключ объекта настройки.
Подробнее см. в Настройки, автоматически сохраняемые в системном хранилище.
(необязательный)

Тип: Строка.
Имя пользователя, настройки которого получаются.
Если не указан, то получаются настройки текущего пользователя.
Если указан пользователь, не являющийся текущим пользователем, т.е. делается попытка обратиться к настройкам, не принадлежащим текущему пользователю, то требуется наличие у текущего пользователя права АдминистрированиеДанных .
Возвращаемое значение:

Получает список настроек из хранилища.
Значениями элементов списка являются ключи настроек.

Сервер, толстый клиент, внешнее соединение.

А дальше смотрим куда предлагает СП — !см. в Настройки, автоматически сохраняемые в системном хранилище»

Настройки динамического списка:

Хранилище Пользовательских настроек динамического списка

+ «.» +

Источник

Заметки из Зазеркалья

Реализовано в версии 8.3.10.2168.

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

Однако такая универсальность имеет и оборотную сторону. Желание «показать сразу всё» может приводить вас к значительному усложнению запроса. В результате вы будете получать неэффективные планы выполнения и, как результат, снижение производительности при отображении и пролистывании списка.

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

Событие ПриПолученииДанныхНаСервере

Специально для этих целей мы реализовали новый обработчик ПриПолученииДанныхНаСервере(). Он добавлен в расширение таблицы, отображающей динамический список.

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

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

Вы можете изменить данные, находящиеся в этих строках, или применить к ячейкам собственное оформление. Доступны такие возможности оформления как ЦветФона, ЦветТекста, Шрифт, ГоризонтальноеПоложение, Видимость, Доступность, Отображать, Текст и Формат.

Также, при необходимости, вы можете посмотреть и проанализировать копию полных настроек динамического списка. Но изменить настройки вы не сможете.

Простейший сценарий использования

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

До сих пор эта задача решалась левым соединением в запросе динамического списка, и условным оформлением списка, устанавливаемым в конфигураторе.

Теперь она решается так. Стандартный запрос списка не усложняется, в него добавляется только фиктивное поле Остаток.

Читайте также:  Куда в мозиле пропали настройки

А в обработчике ПриПолученииДанныхНаСервере() только для полученных строк вычисляются остатки. И тут же маленькие остатки выделяются красным.

Здесь, методом ПолучитьКлючи(), из коллекции строк динамического списка вы получаете их ключи (ссылки), и передаёте эти ключи в запрос остатков.

Затем, при обходе результатов запроса, вы получаете нужные строки по ключу, в колонку Остаток помещаете значение, и устанавливаете оформление этого поля, если нужно.

В результате пользователь видит следующий список:

В чём преимущество такого варианта?

Во-первых, запрос списка остаётся простым. Или он не остаётся простым, но количество соединений в нём уменьшается. А это значит, что для него, с большой долей вероятности, будет построен хороший план.

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

И, в-третьих, новый обработчик выполняется уже после того, как основные данные получены из базы и прошли проверку прав. Это значит, что в некоторых сценариях получение связанных данных в обработчике можно выполнять в привилегированном режиме, без проверки прав. Это ускоряет работу списка.

Ограничения на изменяемые и добавляемые поля

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

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

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

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

Источник

Динамические списки в 1С на примере справочника «Контрагенты»

Рассмотрим работу с динамическими списками на примере конфигурации 1С.Управление торговлей. Для примера разберем динамический список для справочника «Контрагенты».

Запустим 1С в режиме «Конфигуратор».

В конфигурации найдем справочник «Контрагенты».

Откроем форму «Форма Списка».

Рассмотрим форму списка справочника. Реквизит «Список» имеет тип «ДинамическийСписок».

Двойным щелчком откроем свойства реквизита.

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

Нажмем теперь «Открыть» у свойства «Настройка списка».

Перед нами открывается окно настройки запроса динамического списка. Первая вкладка «Запрос».

Мы можем ка написать запрос вручную в поле «Запрос», так и воспользоваться кнопкой «Конструктор запросов».

На данной вкладке так же стоит обратить внимание на флаги «Динамическое считывание данных» и «Автозаполнение доступных полей».

Флаг «Динамическое считывание данных» определяет размер «части» возвращаемых запросом данных. Т.е. Если флаг установлен, то «части» имеют не большой размер, но при прокрутке динамического списка может происходить небольшое подвисания из-за до получения «частей». Если флаг не установлен, то возвращаемые данные мы получаем большими «частями». Это означает, что первоначально запрос может отрабатывать дольше, но подвисаний в процессе прокрутки не будет.

Флаг «Автозаполнение доступных полей» определяет поля доступные для отбора. Если флаг установлен, то поля верхней выборки становятся доступными для установки отбора.

Вторая вкладка «Настройки».

На данной вкладке мы можем установить некоторые отборы. Стоит обратить внимание на флаг «Включать в пользовательские настройки».

Читайте также:  Настройка терморегулятора для аогв

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

Так же на вкладке «Настройки» мы можем задавать «Порядок», «Группировки» и «Условное оформление.

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

Как оптимизировать работу с программой?

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

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

Вы еще не внедрили 1С или необходимо установить программу в новый филиал компании? Обратитесь за внедрением и настройкой к нам — вы сэкономите свое время и избежите возможных ошибок и проблем в дальнейшем.

Позвоните по номеру телефона, указанному на сайте или заполните форму обратной связи, чтобы наши сотрудники сориентировали по стоимости работ, подобрали оптимальное решение и рассказали, как начать сотрудничество. Ждем вас!

Источник

Сохранение/восстановление настроек динамического списка

Идея не моя, я ее только докрутил под себя. Вычитал основу тут.

Основные моменты и предпосылки:

1) Преобразуем настройки списков так, чтобы их можно было сохранять

2) в 95% случаев при открытии формы нам нужно, чтобы восстановилось последнее состояние формы, а не по умолчанию или список выбора сохраненной настройки(которую еще и сохранить до этого нужно было)

3) Списки в основном учавствуют в формах списка и выбора, где нет других полей к сохранению, поэтому к стандартному механизму с методами ПриСохраненииДанныхВНастройкахНаСервере и ПриЗагрузкеДанныхИзНастроекНаСервере больно то не подрубишся

После небольшой работы мозгами получилось следующее:

в форме пишем такой код:

&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )

ксНастройкиСервер . ВосстановитьНастройкиСписка ( ЭтаФорма );

&НаКлиенте
Процедура ПриЗакрытии ()

ксНастройкиСервер . СохранитьНастройкиСписка ( ЭтаФорма );

или аналогично внедряем в методы ПриСохраненииДанныхВНастройкахНаСервере и ПриЗагрузкеДанныхИзНастроекНаСервере одноименные процедуры.

Внедряем в конфигурацию общий модуль ксНастройкаСервер с таким содержанием:

Процедура СохранитьНастройкиСписка ( пФорма , пИмяСписка = «» ) Экспорт

Настройки = Новый Соответствие ;
ПриСохраненииДанныхВНастройках ( Настройки , пФорма , пИмяСписка );

ХранилищеНастроекДанныхФорм . Сохранить ( пФорма . ИмяФормы ,, Настройки );

Процедура ВосстановитьНастройкиСписка ( пФорма , пИмяСписка = «» ) Экспорт

Настройки = ХранилищеНастроекДанныхФорм . Загрузить ( пФорма . ИмяФормы );

Если ТипЗнч ( Настройки ) = Тип ( «Соответствие» ) Тогда

ПриЗагрузкеДанныхИзНастроек ( Настройки , пФорма , пИмяСписка );

Процедура ПриСохраненииДанныхВНастройках ( Настройки , пФорма , пИмяСписка = «» ) Экспорт

Если ЗначениеЗаполнено ( пИмяСписка ) Тогда

УстановитьНастройкиДинСпискаВСоответствиие ( Настройки , пФорма [ имяСписка ], пИмяСписка );

Процедура УстановитьНастройкиДинСпискаВСоответствиие ( пСоответствие , пСписок , пИмяСписка = «» )

префиксКлюча = ПрефиксКлючаНастроекСписка ( пИмяСписка );

пСоответствие . Вставить ( префиксКлюча + «Группировка» , СериализоватьГруппировки ( пСписок . Группировка ) );
пСоответствие . Вставить ( префиксКлюча + «Отбор» , СериализоватьОтбор ( пСписок . Отбор ) );
пСоответствие . Вставить ( префиксКлюча + «Порядок» , СериализоватьПорядок ( пСписок . Порядок ) );
пСоответствие . Вставить ( префиксКлюча + «УсловноеОформление» , СериализоватьУсловноеОформление ( пСписок . УсловноеОформление ) );

Функция ПрефиксКлючаНастроекСписка ( пИмяСписка )

Если ЗначениеЗаполнено ( пИмяСписка ) Тогда

префиксКлюча = пИмяСписка + «_» ;

Процедура ПриЗагрузкеДанныхИзНастроек ( Настройки , пФорма , пИмяСписка = «» ) Экспорт

Если ЗначениеЗаполнено ( пИмяСписка ) Тогда

УстановитьНастройкиИзСоответствияВДинСписок ( Настройки , пФорма [ имяСписка ], пИмяСписка );

Процедура УстановитьНастройкиИзСоответствияВДинСписок ( пСоответствие , пСписок , пИмяСписка = «» )

префиксКлюча = ПрефиксКлючаНастроекСписка ( пИмяСписка );

ДесериализоватьГруппировки ( пСоответствие [ префиксКлюча + «Группировка» ] , пСписок . Группировка );
ДесериализоватьОтбор ( пСоответствие [ префиксКлюча + «Отбор» ] , пСписок . Отбор );
ДесериализоватьПорядок ( пСоответствие [ префиксКлюча + «Порядок» ] , пСписок . Порядок );
ДесериализоватьУсловноеОформление ( пСоответствие [ префиксКлюча + «УсловноеОформление» ] , пСписок . УсловноеОформление );

// Группировки
Функция СериализоватьГруппировки ( пГруппировки )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «Группировки» );
Для Каждого цЭлементГруппировки Из пГруппировки . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементГруппировки );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Читайте также:  Оборудование для диагностики и настройки эбу

Процедура ДесериализоватьГруппировки ( пНастройки_Группировка , пГруппировка )

пГруппировка . Элементы . Очистить ();
Если пНастройки_Группировка <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML ();
ЧтениеXML . УстановитьСтроку ( пНастройки_Группировка );
ЧтениеXML . ПерейтиКСодержимому ();
Если ЧтениеXML . ТипУзла = ТипУзлаXML . НачалоЭлемента И ЧтениеXML . Имя = «Группировки» Тогда
ЧтениеXML . Прочитать ();
Пока ЧтениеXML . ТипУзла <> ТипУзлаXML . КонецЭлемента И ЧтениеXML . Имя <> «Группировки» Цикл
ПолеГруппировкиXML = СериализаторXDTO . ПрочитатьXML ( ЧтениеXML );
ПолеГруппировки = пГруппировка . Элементы . Добавить ( Тип ( «ПолеГруппировкиКомпоновкиДанных» ));
ЗаполнитьЗначенияСвойств ( ПолеГруппировки , ПолеГруппировкиXML );
КонецЦикла;
КонецЕсли;
КонецЕсли;

Функция СериализоватьПорядок ( пПорядок )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «Порядок» );
Для Каждого цЭлементПорядка Из пПорядок . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементПорядка );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Функция ДесериализоватьПорядок ( пНастройки_Порядок , пПорядок )

пПорядок . Элементы . Очистить ();
Если пНастройки_Порядок <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML ();
ЧтениеXML . УстановитьСтроку ( пНастройки_Порядок );
ЧтениеXML . ПерейтиКСодержимому ();
Если ЧтениеXML . ТипУзла = ТипУзлаXML . НачалоЭлемента И ЧтениеXML . Имя = «Порядок» Тогда
ЧтениеXML . Прочитать ();
Пока ЧтениеXML . ТипУзла <> ТипУзлаXML . КонецЭлемента И ЧтениеXML . Имя <> «Порядок» Цикл
ПолеПорядкаXML = СериализаторXDTO . ПрочитатьXML ( ЧтениеXML );
ПолеПорядка = пПорядок . Элементы . Добавить ( ТипЗнч ( ПолеПорядкаXML ));
ЗаполнитьЗначенияСвойств ( ПолеПорядка , ПолеПорядкаXML );
КонецЦикла;
КонецЕсли;
КонецЕсли;

Функция СериализоватьОтбор ( пОтбор )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «Отборы» );
Для Каждого цЭлементОтбора Из пОтбор . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементОтбора );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Процедура ДесериализоватьОтбор ( пНастройки_Отбор , пОтбор )

пОтбор . Элементы . Очистить ();
Если пНастройки_Отбор <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML ();
ЧтениеXML . УстановитьСтроку ( пНастройки_Отбор );
ЧтениеXML . ПерейтиКСодержимому ();
Если ЧтениеXML . ТипУзла = ТипУзлаXML . НачалоЭлемента И ЧтениеXML . Имя = «Отборы» Тогда
ЧтениеXML . Прочитать ();
Пока ЧтениеXML . ТипУзла <> ТипУзлаXML . КонецЭлемента И ЧтениеXML . Имя <> «Отборы» Цикл
ПолеОтбораXML = СериализаторXDTO . ПрочитатьXML ( ЧтениеXML );
ПолеОтбора = пОтбор . Элементы . Добавить ( ТипЗнч ( ПолеОтбораXML ));
СкопироватьЭлементыОтбораРекурсивно ( ПолеОтбораXML , ПолеОтбора );
//ПолеОтбора.Поле = ПолеОтбораXML.Поле;
КонецЦикла;
КонецЕсли;
КонецЕсли;

Процедура СкопироватьЭлементыОтбораРекурсивно ( пОтборОткуда , пОтборКуда );

ЗаполнитьЗначенияСвойств ( пОтборКуда , пОтборОткуда );
Если ТипЗнч ( пОтборОткуда ) = Тип ( «ГруппаЭлементовОтбораКомпоновкиДанных» ) Тогда
Для Каждого ЭлементОтбора Из пОтборОткуда . Элементы Цикл
НовыйЭлементОтбора = пОтборКуда . Элементы . Добавить ( ТипЗнч ( ЭлементОтбора ));
СкопироватьЭлементыОтбораРекурсивно ( ЭлементОтбора , НовыйЭлементОтбора );
КонецЦикла;
КонецЕсли;

Функция СериализоватьУсловноеОформление ( пУсловноеОформление )

ЗаписьXML = Новый ЗаписьXML ();
ЗаписьXML . УстановитьСтроку ();
ЗаписьXML . ЗаписатьНачалоЭлемента ( «УсловноеОформление» );
Для Каждого цЭлементУсловногоОформления Из пУсловноеОформление . Элементы Цикл
СериализаторXDTO . ЗаписатьXML ( ЗаписьXML , цЭлементУсловногоОформления );
КонецЦикла;
ЗаписьXML . ЗаписатьКонецЭлемента ();
Возврат ЗаписьXML . Закрыть ();

Функция ДесериализоватьУсловноеОформление ( пНастройки_УсловноеОформление , пУсловноеОформление )

пУсловноеОформление . Элементы . Очистить ();
Если пНастройки_УсловноеОформление <> Неопределено Тогда
ЧтениеXML = Новый ЧтениеXML ();
ЧтениеXML . УстановитьСтроку ( пНастройки_УсловноеОформление );
ЧтениеXML . ПерейтиКСодержимому ();
Если ЧтениеXML . ТипУзла = ТипУзлаXML . НачалоЭлемента И ЧтениеXML . Имя = «УсловноеОформление» Тогда
ЧтениеXML . Прочитать ();
Пока ЧтениеXML . ТипУзла <> ТипУзлаXML . КонецЭлемента И ЧтениеXML . Имя <> «УсловноеОформление» Цикл
ПолеУсловногоОформленияXML = СериализаторXDTO . ПрочитатьXML ( ЧтениеXML );
ПолеУсловногоОформления = пУсловноеОформление . Элементы . Добавить ();
ЗаполнитьЗначенияСвойств ( ПолеУсловногоОформления , ПолеУсловногоОформленияXML );
Для Индекс = 0 по ПолеУсловногоОформленияXML . Оформление . ДоступныеПараметры . Элементы . Количество ()- 1 Цикл
ЗаполнитьЗначенияСвойств ( ПолеУсловногоОформления . Оформление . ДоступныеПараметры . Элементы [ Индекс ],
ПолеУсловногоОформленияXML . Оформление . ДоступныеПараметры . Элементы [ Индекс ]);
КонецЦикла;
Для Индекс = 0 по ПолеУсловногоОформленияXML . Оформление . Элементы . Количество ()- 1 Цикл
ЗаполнитьЗначенияСвойств ( ПолеУсловногоОформления . Оформление . Элементы [ Индекс ],
ПолеУсловногоОформленияXML . Оформление . Элементы [ Индекс ]);
КонецЦикла;
Для каждого ЭлементОтбораXML ИЗ ПолеУсловногоОформленияXML . Отбор . Элементы Цикл
ЭлементОтбора = ПолеУсловногоОформления . Отбор . Элементы . Добавить ( ТипЗнч ( ЭлементОтбораXML ));
СкопироватьЭлементыОтбораРекурсивно ( ЭлементОтбораXML , ЭлементОтбора );
КонецЦикла;
Для каждого ПолеXML ИЗ ПолеУсловногоОформленияXML . Поля . Элементы Цикл
Поле = ПолеУсловногоОформления . Поля . Элементы . Добавить ();
ЗаполнитьЗначенияСвойств ( Поле , ПолеXML );
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;

Источник

Adblock
detector