Сохранение настроек интерфейса управляемой формы
Здравствуйте, уважаемые гуру!
Возник вопрос следующего характера, касательно управляемых форм: имеется ли возможность сохранять настройку интерфейса управляемой формы для дальнейшего выбора, например, из двух сохраненных настроек? Приведу пример: На управляемой форме 2 группы кнопок по 1 кнопке в каждой. Хотелось бы сохранить 2 настройки таким образом, что бы в первой настройке в первой группе была кнопка №1, а во второй №2. Соответственно, вторая настройка должна содержать в первой группе уже кнопку №2, а во второй группе кнопку №1. Графически можно описать это вот так: http://s49.radikal.ru/i125/1101/1b/c976efffed16.jpg
Я знаю, что при изменении управляемой формы, у пользователя сохраняются настройки, и что при повторном открытии они восстанавливаются. Но хотелось бы сохранять РАЗЛИЧНЫЕ настройки формы для возможности быстрого между ними переключения.
Содержит настройки состава, взаимного расположения и свойств элементов управляемой формы.
Сервер, толстый клиент.
Сериализуется.
по моим экспериментам по умолчанию загружается именно настройка с пустой строкой «»
если перед открытием формы заменить «МояНастройка» на «» методом Сохранить то она и должна применится.
Но в результате экспериментов мне так и не удалось повлять на поведение формы
ну и еще на всякий случай может найдешь чего полезного
Итак, путем «мозге хох залупирт», потратив кучу времени, я все-таки допер, каким образом работает сей механизм. Итак, проведем экспериментос.
1. Создаем управляемую форму. (я делал это именно внутри конфигуратора, а не внутри внешней обработки.
2. В форме создаем элементы, которые будем двигать/изменять.
3. В форме создаем 3 кнопки. Тексты их обработчиков ниже:
&НаКлиенте
В этом коде глЗначениеПеременной(«глТекущийПользователь») замените на имя пользователя.
4. Тестируем то, что у нас получилось. Открываем нашу форму. Хреновертим с ее видом и нажимаем кнопку сохранения настройки. Вводим красивое имя «Один». Настройка сохранилась.
5. Теперь хреновертим еще и снова нажимаем кнопку сохранения настройки. Вводим красивое имя «Два».
6. Перезапускаем 1С для верности.
7. Открываем нашу форму, кнопаем пимпу загрузки настроек и выбираем настройку с красивым названием «Один».
8. Перезапускаем один эс и снова открываем форму. Что же мы видим. Ничего не изменилось. Настроечка с красивым названием «Один» не применилась!
9. Перезапускаем 1С для верности.
10. Открываем нашу форму, кнопаем пимпу загрузки настроек и выбираем настройку с красивым названием «Один».
11. Закрываем один эс.
12. Открываем конфигуратор, открываем любой модуль, встаем в любое незначимое место и добавляем туда символ пробела, например. То есть суть модуля не изменится, но изменится конфигурация.
13. Обновляем конфигурацию.
14. Запускаем один эс и открываем нашу красивую формы.
15. Вуаля! Настроечка с красивым названием «Один» применилась!
Выводы: хотя механизм и работает, но фунциклирует но почему-то исключительно с помощью обновления конфиги, хотя настройки действительно можно сохранять. Непонятно, почему же все-таки он работает правильно, если делать все это платформенными методами.
PS: Уж не знаю, баг ли это, или нет, но в 1С по этому поводу не писал.
Программирование в 1С для всех
В этой статье разберем, как работать с сохранением данных на форме в 1С 8.3.
Сохраняемые данные формы 1С
У любой управляемой формы можно настроить сохранение данных реквизитов формы. Это значит, что форма сохранит данные введенные в поля, которые соответствуют реквизитам, при закрытии формы, а при последующем открытии формы информация в этих полях восстановятся автоматически.
Например, у меня на форме обработки имеются поля, данные в которых сохраняются при закрытии формы и восстанавливаются при последующем открытии.
Это поля Контрагент и Цена.
Для того, чтобы на управляемой форме данные из соответствующих реквизитов сохранялись, необходимо выполнить следующие действия.
Первое. У свойства формы «Автоматическое сохранение данных в настройках» установить значение «Использовать».
Второе. После того, как будет установлено значение в свойство, которое упоминали выше, у реквизитов формы появится колонка «Сохранение». Именно в этой колонке и нужно поставить флажки рядом с теми реквизитами, значения которых мы хотим сохранять при закрытии формы.
После этих действий, данные у отмеченных реквизитов будут сохраняться.
Хранилище настроек в 1С
Вышеприведенный способ позволяет сохранять последние данные, с которыми работали на форме. Но, могут возникнуть ситуации, когда нужно будет сохранять какую-то произвольную комбинацию значений реквизитов, а потом восстановить её. Если рассматривать ситуацию выше, то это может быть комбинация контрагента и цены: для одного контрагента одна цена, для другого другая и т.д.
Для того, чтобы такая возможность имелась, необходимо в свойстве «Хранилище данных настроек» управляемой формы установить значение «Использовать список».
А потом, у нужных реквизитов формы следует установить флаг у свойства «Сохраняемые данные».
После таких изменений, у формы в группе Ещё появятся команды «Сохранить параметры» и «Восстановить параметры».
Теперь мы можем сохранить любую комбинацию реквизитов Контрагент – Цена.
И можем восстановить нужную комбинацию в любой момент работы с формой, а не только при открытии.
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Сохранение (чтение) настроек внешней обработки в файл (управляемые формы)
Однако, очень часто обработку нужно проверять на тестовой базе или другом сервере и т.п., поэтому требуется сохранить все значения реквизитов формы (в том числе табличной части) в файл, а потом загрузить из файла уже в другой конфигурации.
То, что это возможно легко понять по намёкам на форумах, однако ни одного законченного решения найти не удалось. Что ж, к этому нам не привыкать, начинаем придумывать велосипед.
Пробуем сначала сохранить значения всех реквизитов формы в файл. Поиски в интернете приводят нас к процедуре ЗначениеВФайл и функции ЗначениеВСтрокуВнутр, приём последней пользоваться как бы не рекомендуется, якобы она предназначена для обмена с 7.7. Обе конструкции языка доступны только на сервере и толстом клиенте, поэтому возникает вопрос, как бы обойти значения всех реквизитов формы &НаСервере.
выдаст вполне ожидаемую не для всех ошибку: Итератор для значения не определен.
Казалось бы, теперь всё просто, однако не совсем. Табличная часть, как и таблица значений имеют не совсем ожидаемый тип значений, их тип ДанныеФормыКоллекция. А ведь они должны быть обязательно выгружены для сохранения, иначе в файле получим только их уникальные индификаторы.
В результате этого знания получаем:
Поэтому переписываем код, сохраняем файл теперь на клиенте, правда придётся воспользоваться не очень рекомендуемой функцией ЗначениеВСтрокуВнутр:
Теперь перейдём к загрузке из файла. Мы не будем использовать, как мы уже выяснили, следующий неправильный код с передачей только имени файла на сервер:
А напишем другой вариант, например, используя временное хранилище:
Если внимательно посмотреть код, то легко заметить, что после получения данных из временного хранилища (с типом ДвоичныеДанные) мы вынуждены записать их во временный файл. Другого нормального способа получить данные с типом Строка из временного хранилища попросту нет.
Как видно, вариантов сохранения настроек в файл и чтения настроек из файла очень много, даже в этой статье мы рассмотрели далеко не все, однако эти варианты рабочие и должны сэкономить вам время, когда у вас возникнет такая необходимость.
В прикрепленной ниже внешней обработке используется последний вариант сохранения и чтения настроек через файл из этой статьи, ну и, конечно, автосохранение штатными средствами в информационной базе.
Сохранение и изменение настроек форм у всех пользователей 1С: Документооборот
Основные преимущества над стандартным функционалом копирования настроек пользователя:
Подключить расширение:
Под пользователем с полными правами (далее Администратор)
Нажать добавить файл, выбрать файл НастройкиФорм.cfe
отключить безопасный режим и перезапустить программу.
После подключения расширения, во всех основных формах программы в меню «Ещё», под Администратором появится команда «Общие настройки форм»
У всех пользователей без полных прав в меню «Еще» появится команда «Установить общий вид формы»
Как это работает (пример по демо базе):
Допустим вам нужно для всех пользователей программы изменить стандартный вид документа «Заявление на отпуск». Примерно так.
Ваши действия под Администратором:
У пользователей без полных прав доступна только команда Установить общий вид формы, при выборе которой, форме устанавливается вид настроенный Администратором.
Расширение разрабатывалось для версии 1С Документооборот 8 КОРП, редакция 2.1 (2.1.13.28). Тестировалось на 2.1.14/15/16. Вероятно подойдет для более старых релизов начиная с версий 2.0 и новых, если не будет серьезных изменений в логике связанной с настройками форм.
Работает на платформах начиная с версий 8.3.12.
Если будут вопросы и предложения к функционалу расширения, пишите в комментариях к публикации, учту в новом релизе.
Update
Версия 1.1: Первичная версия
Версия 1.2: Добавлена поддержка ПРОФ, ДГУ и Document management
Сохранение значений реквизитов управляемых форм
Для сохранения значений реквизитов управляемой формы в 1С нужно включить свойство управляемой формы СохранениеДанныхВНастройках. После этого в окне реквизитов формы появится дополнительная колонка Сохранять данные в настройках. В этой колонке нужно поставить флаг у тех реквизитов, значения которых нужно сохранять.
После этого на форме появятся стандартные кнопки Сохранить параметры и Восстановить параметры (возможно, они будут скрыты под кнопкой Еще).
Однако, автоматическое сохранение значений доступно только для реквизитов формы. Для табличных частей флаг Сохранять данные в настройках не предусмотрен. Однако, табличные части можно преобразовать, например, в массивы и уже их сохранить в настройках формы.
Рассмотрим эту процедуру на примере формы с двумя табличными частями: ТипыЦен и ГруппыНоменклатуры. В каждой табличной части по одной колонке.
Для сохранения значений табличной части управляемой формы нам потребуется создать процедуру для события формы ПриСохраненииДанныхВНастройкахНаСервере. Как следует из названия, это событие возникает при сохранении значений реквизитов формы. И тут то мы и сможем добавить к реквизитам нашу табличную часть, предварительно преобразованную в массив.
Процедура ПриСохраненииДанныхВНастройкахНаСервере ( Настройки )
Теперь осталось восстановить табличные части из массивов при загрузке настроек управляемой формы. Для этого нам потребуется процедура для события ПриЗагрузкеДанныхИзНастроекНаСервере.
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере ( Настройки )