1С 8.2 Управляемое приложение. Сохранение реквизитов объектов формы.

09.12.12

Разработка - Работа с интерфейсом

1С 8.2 Управляемое приложение. Сохранение реквизитов объектов формы.

Скачать исходный код

Наименование Файл Версия Размер
infostart2012-template.epf
.epf 10,86Kb
75
.epf 10,86Kb 75 Скачать

 

 

Совсем недавно передо мной встала задача, сделать внешнюю обработку в УТ11, которая как известно работает полностью на управляемых формах. Какое же было мое удивление, когда я обнаружил, что у управляемой формы реквизиты заведенные как реквизиты формы, при закрытии и открытии ее заново могут сохраняться и восстанавливаться, точно так же как это было в 8.1, достаточно только поставить напротив галочку сохраненять и в свойствах формы выбрать "АвтоматическоеСохранениеДанныхВНастройках"  - Использовать. А что же делать с реквизитами, которые выступают в роли реквизитов объектов ? Погуглив и так ничего толком не найдя, я приступил к экспериментам. Делюсь полученнными результатами.

Поскольку в платформе (8.2.16.362) механизим сохранения реквизитов объектов так и не был найден, осталось только одно - это програмное сохранение настроек при закрытии обработки и программное восстановление при открытии.

 

За основу примера была взята обработка с конкурса БиТа  отсюда Результаты конкурса для участников INFOSTART EVENT 2012 от Первого Бита. за что им кстати огромное спасибо.

К обработке, для наглядности, я еще добавил 2 реквизита. Реквизит1 - тип строка и Реквизит2 -тип "Произвольный", чтобы было еще что-то, кроме "таблицы значений".

Итак, обо всем по порядку:

I. Было создано две процедуры:

 

1.

&НаСервере
Процедура СохранитьНастройки()

КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
Настройки = Новый Соответствие;

Настройки.Вставить("ТаблицаЗначений", Объект.Свойства.Выгрузить());

Настройки.Вставить("Реквизит1", Объект.Реквизит1);
Настройки.Вставить("Реквизит2", Объект.Реквизит2);

ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек, Настройки);

КонецПроцедуры

и

2.

 

&НаСервере
Процедура ВосстановитьНастройки()

КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";

ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек);

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

ЗначениеИзНастройки = ЗначениеНастроек.Получить("ТаблицаЗначений");

Объект.Реквизит1 = ЗначениеНастроек.Получить("Реквизит1");
Объект.Реквизит2 = ЗначениеНастроек.Получить("Реквизит2");

Объект.Свойства.Загрузить(ЗначениеИзНастройки);

КонецЕсли;

КонецПроцедуры


II. Затем эти процедуры были прописаны в соответствующих процедурах, выполняющихся при открытии и закрытии формы

 

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

ВосстановитьНастройки();

КонецПроцедуры



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

СохранитьНастройки()

КонецПроцедуры

 

Если же по каким то причинам планируется использовать не типовую или не основанную на БСП конфигурацию,  то можно заменить текст процедур ВосстановитьНастройки() и СохранитьНастройки() так :

 

&НаСервере
Процедура ВосстановитьНастройки()

КлючОбъекта = "Обработка.ЗадачаПоУТ_11_шаблон";
КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
ОписаниеНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
Значение ="";
ИмяПользователя = "";

//ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек);
ЗначениеНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);

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

ЗначениеИзНастройки = ЗначениеНастроек.Получить("ТаблицаЗначений");

Объект.Реквизит1 = ЗначениеНастроек.Получить("Реквизит1");
Объект.Реквизит2 = ЗначениеНастроек.Получить("Реквизит2");

Объект.Свойства.Загрузить(ЗначениеИзНастройки);

КонецЕсли;

КонецПроцедуры



&НаСервере
Процедура СохранитьНастройки()

КлючОбъекта = "Обработка.ЗадачаПоУТ_11_шаблон";
КлючНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
ОписаниеНастроек = "Обработка.ЗадачаПоУТ_11_шаблон";
Значение ="";
ИмяПользователя = "";

Настройки = Новый Соответствие;

Настройки.Вставить("ТаблицаЗначений", Объект.Свойства.Выгрузить());

Настройки.Вставить("Реквизит1", Объект.Реквизит1);
Настройки.Вставить("Реквизит2", Объект.Реквизит2);

//ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ЗадачаПоУТ_11_шаблон", КлючНастроек, Настройки);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);

КонецПроцедуры

 

Как это все работает, можно посмотреть скачав приложенную к статье обработку.

 

См. также

Управление дашбордами

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    17099    23    4    

37

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    11568    771    elcoan    46    

107

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    10126    156    acces969    31    

119

Модель состояния для MVC

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4132    kalyaka    4    

31

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

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

6000 руб.

18.01.2022    9069    1    2    

6

Программный интерфейс для доработки форм

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    9900    AtamanovYS    19    

139
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. director04 3657 09.07.13 09:34 Сейчас в теме
Спасибо, что не пришлось долго искать.
Хотя, даже странно, почему обошлось без злопыхателей по поводу велосипеда.... ))))

Еще раз спасибо автору.
2. nagimo 7 22.07.14 13:17 Сейчас в теме
Платформа уже 8.3.4, а проблема все та же. Спасибо за статью, очень пригодилась.
3. shamahn 1 03.12.14 20:01 Сейчас в теме
&НаСервере
Процедура ЗагрузитьНастройкиНаСервере(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию)
	ЭтотОб = РеквизитФормыВЗначение("Объект");
	Настройки = ЭтотОб.ЗагрузитьНастройки(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию);
	
	Объект.Свойства.Загрузить(Настройки);
КонецПроцедуры

{Форма.Форма.Форма(6)}: Поле объекта не обнаружено (Свойства)
Объект.Свойства.Загрузить(Настройки);


1С:Предприятие 8.3 (8.3.5.1248)
Что-то изменилось в платформе? Не проблема, конечно пробежаться по реквизитам и записать их, но реквизит свойства, почему-то, отсутствует. Что-то изменилось в платформе?
4. abc2000 83 03.12.14 22:34 Сейчас в теме
8.3.5.1248 все работает.
Кусок приведенного Вами, выше кода в публикации отсутствует, и по данному приведенному отрывку получить полное представление почему вываливается ошибка не представляется, по крайней мере мне, возможным.
5. abc2000 83 03.12.14 22:36 Сейчас в теме
Да и самое главное, где в публикации написано про
РеквизитФормыВЗначение("Объект");
?
P.S. Советую не изобретать ничего, а скачать прикрепленную обработку и убедиться самому, что все работает. Если что то, вдруг не сработает будем разбираться вместе. :)
Светлый ум; +1 Ответить
6. shamahn 1 05.12.14 00:04 Сейчас в теме
P.S. Советую не изобретать ничего, а скачать прикрепленную обработку и убедиться самому, что все работает.

Я не спорю, скорее всего и работает. Но у меня задача немного другая, а Ваш текст пробовал адаптировать про свои задачи. Скачать не могу, - не хватает местных денег. Да оно и не особо надо :)
и по данному приведенному отрывку получить полное представление почему вываливается ошибка не представляется

Ошибка в модуле формы в серверной процедуре при обращении к свойству "свойства" объекта "объект" :) Все ясно. Все исходные данные такие же как и в Вашем примере, но, видимо, "свойств" у меня в "объекте" нету.

Я просто только начал управляемые формы грызть. До этого как-то не надо было... А сейчас столько нового и интересного оказывается.
Спасибо за помощь
7. abc2000 83 05.12.14 03:52 Сейчас в теме
Свойства это название визуального элемента табличной части на форме, в котором выбираются свойства номенклатуры. Если его нет то будет ошибка конечно же.
8. shamahn 1 05.12.14 10:06 Сейчас в теме
(7) А! О! Точно! Спасибо, мил человек :) Теперь совсем разобрался
9. koar 27.01.15 12:37 Сейчас в теме
Спасибо, очень помогло!
10. chmv 13.01.16 10:21 Сейчас в теме
11. sommid 11.05.16 15:06 Сейчас в теме
а сохранение таблицы, у которой в качестве реквизита тоже есть таблица, кто-нить делал?
12. msokolan 17.05.16 13:34 Сейчас в теме
Спасибо. Тоже столкнулся с такой проблемой, решил прогаммно, но сомневался может чего не заметил и есть секрет.
13. djerry 29.10.17 12:07 Сейчас в теме
Маленькое уточнение:
&НаКлиенте
Процедура ПриЗакрытии()
СохранитьНастройки()
КонецПроцедуры

должно быть в процедуре ПередЗакрытием
17. Merkalov 8 01.12.19 11:40 Сейчас в теме
14. vis_tmp 32 19.08.19 14:17 Сейчас в теме
Работает ли для пользователя с неполными правами?
15. abc2000 83 19.08.19 18:01 Сейчас в теме
С "не полными" это понятие растяжимое. Вообще-то должно.
16. Merkalov 8 01.12.19 11:25 Сейчас в теме
Спасибо.
Только переменная "Значение" нигде не используется, нормальная среда разработки бы выругалась...
18. Amax 08.03.23 10:40 Сейчас в теме
Ошибка в модуле формы в серверной процедуре при обращении к свойству "свойства" объекта "объект" :) Все ясно. Все исходные данные такие же как и в Вашем примере, но, видимо, "свойств" у меня в "объекте" нету.

Что делать если нет этого "свойства" ?
Оставьте свое сообщение