В этой статье разберем, как работать с сохранением данных на форме в 1С 8.3.
Сохраняемые данные формы 1С
У любой управляемой формы можно настроить сохранение данных реквизитов формы. Это значит, что форма сохранит данные введенные в поля, которые соответствуют реквизитам, при закрытии формы, а при последующем открытии формы информация в этих полях восстановятся автоматически.
Например, у меня на форме обработки имеются поля, данные в которых сохраняются при закрытии формы и восстанавливаются при последующем открытии.
Это поля Контрагент и Цена.
Для того, чтобы на управляемой форме данные из соответствующих реквизитов сохранялись, необходимо выполнить следующие действия.
Первое. У свойства формы «Автоматическое сохранение данных в настройках» установить значение «Использовать».
Второе. После того, как будет установлено значение в свойство, которое упоминали выше, у реквизитов формы появится колонка «Сохранение». Именно в этой колонке и нужно поставить флажки рядом с теми реквизитами, значения которых мы хотим сохранять при закрытии формы.
После этих действий, данные у отмеченных реквизитов будут сохраняться.
Хранилище настроек в 1С
Вышеприведенный способ позволяет сохранять последние данные, с которыми работали на форме. Но, могут возникнуть ситуации, когда нужно будет сохранять какую-то произвольную комбинацию значений реквизитов, а потом восстановить её. Если рассматривать ситуацию выше, то это может быть комбинация контрагента и цены: для одного контрагента одна цена, для другого другая и т.д.
Для того, чтобы такая возможность имелась, необходимо в свойстве «Хранилище данных настроек» управляемой формы установить значение «Использовать список».
А потом, у нужных реквизитов формы следует установить флаг у свойства «Сохраняемые данные».
После таких изменений, у формы в группе Ещё появятся команды «Сохранить параметры» и «Восстановить параметры».
Теперь мы можем сохранить любую комбинацию реквизитов Контрагент – Цена.
И можем восстановить нужную комбинацию в любой момент работы с формой, а не только при открытии.
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
УФ Как программно установить «Сохранение» у реквизита формы? |
Я |
15.10.12 — 19:22
УФ
Как программно установить «Сохранение» у реквизита формы?
1 — 15.10.12 — 19:36
У формы стоит Автоматическое сохранение?
2 — 15.10.12 — 19:41
Да
3 — 15.10.12 — 19:42
Нужно именно программно создать реквизит формы и установить у него «Сохранение» в Истина.
4 — 15.10.12 — 21:11
Актуально
5 — 15.10.12 — 21:18
Новый РеквизитФормы()
6 — 15.10.12 — 21:21
(5) Как создать реквизит программно я знаю. Как у него программно установить «Сохранение» — не знаю.
7 — 16.10.12 — 02:43
Определи один реквизит произвольного типа, который будет хранить значения создаваемых реквизитов. Пиши в него структуру с новыми реквизитами перед сохранением, и восстанавливай после восстановления.
8 — 16.10.12 — 02:47
то кодом использовать типовое нельзя ?
9 — 16.10.12 — 02:49
хм. в типовой такое.
// Процедура сохраняет настройки формы.
//
// Параметры:
// СохраненнаяНастройка — СправочникСсылка.СохраненныеНастройки — сохраняемая настройка.
// СохраняемыеНастройки — параметры настройки формы.
//
Процедура СохранитьНастройкуОбъекта(СохраненнаяНастройка, СохраняемыеНастройки) Экспорт
ОбъектСохраненнаяНастройка = СохраненнаяНастройка.ПолучитьОбъект();
Если СохраненнаяНастройка.Предопределенный тогда
СохраняемыеНастройки.Вставить(«Изменялась», истина);
КонецЕсли;
ОбъектСохраненнаяНастройка.ХранилищеНастроек = Новый ХранилищеЗначения(СохраняемыеНастройки);
Попытка
ОбъектСохраненнаяНастройка.Записать();
Исключение
ОбщегоНазначения.СообщитьОбОшибке(НСтр(«ru=’Настройка формы не записана:’;uk=’Настройка форми не записана:'») + Символы.ПС + «- » + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
10 — 16.10.12 — 09:25
(3) программно создал, программно и сохраняй
11 — 16.10.12 — 09:45
(7) Вопрос, поднятый в теме и возник то из-за желания обойтись без интерактивного создания реквизитов формы.
(10) Не все так просто. Нужна обработка, не требующая никаких (кроме программных) изменений форм. В т.ч. и интерактивного добавления реквизитов. Создания хранилищ и т.п.
Посему реализуется сохранение через стандартные механизмы. А именно через ПриСохраненииДанныхВНастройкахНаСервере(Настройки), где я к уже сохраняемым настройкам добавляю свои.
Восстанавливаю их по похожей схеме. Проблема в том, что эта процедура вызывается лишь при условии, что хотя бы одна из сохраняемых (штатно) настроек изменила свое состояние относительно начального во время сеанса работы с формой. Т.е. мне полюбому нужен реквизит формы с признаком «Сохранение», который можно «передернуть» в сеансе работы с формой. Вот и вопрос — как у реквизита формы программно установить «Сохранение».
Может есть более «красивые» методы — буду рад подсказке.
12 — 16.10.12 — 09:51
(9) Сейчас посмотрю
13 — 16.10.12 — 10:07
(9) Не подойдет — хранение настроек в справочнике, а не в системных таблицах.
14 — 16.10.12 — 10:25
Сохранение программно нарисованного реквизита формы средствами платформы? Как такое в голову только приходит.
15 — 16.10.12 — 10:26
можно подумать этот реквизит формы при следующем ее открытии у нее останется.
16 — 16.10.12 — 10:35
А мне не нужно чтобы он оставался.
17 — 16.10.12 — 10:37
Создали реквизит, загрузили в него данные, отработали с формой, сохранили данные реквизита, закрыли форму.
18 — 16.10.12 — 13:27
Значит нельзя — жаль.
19 — 16.10.12 — 13:28
все зависит от самой задачи. РС с ресурсом тип ХранилищеЗначений ну и соответствующие измерения, для отлова принадлежности. Но, имхо, дурь это.
20 — 16.10.12 — 13:34
Задача — универсальная история отборов, не требующая создания новых объектов конфигурации или новых реквизитов объектов или форм в конфигурации.
21 — 16.10.12 — 13:36
типовое сохранение настроек отчетов и объектов не катит?
22 — 16.10.12 — 13:36
или в УФ такого нет
23 — 16.10.12 — 13:36
тоже сделано через РС.
24 — 16.10.12 — 13:39
В УФ есть то что описано в (9). Но там настройки сохраняются в справочнике. А это отдельный объект. Далее уже на универсальность не претендуем…
25 — 16.10.12 — 13:41
(24) ну и? В хранилище можно запихать что хочешь и достать что хочешь, что еще надо?
26 — 16.10.12 — 13:43
(25) Надо не задумываться, есть ли созданное хранилище в той конфигурации куда добавляется обработка и т.д.
Т.е. использовать штатный механизм (и хранилище) 1С, который они используют для хранения по умолчанию.
27 — 16.10.12 — 13:45
угу — еще бы от версии платформы отвязаться.
28 — 19.10.12 — 16:25
В общем ларчик просто открывался.
Программно «Сохранение» я так и не нашел как выставить. Однако проблема, описанная в (11). Не знаю как сразу не заметил свойства формы СохраняемыеВНастройкахДанныеМодифицированы. Оно все и решило. Взводишь его программно — и сохраняй что хочешь в системных таблицах.
Aprobator
29 — 22.10.12 — 10:15
(28) хм прикольно, надо будет глянуть при случае, может тоже пригодится где.
0
1С 8.3 : Реквизит ~ Как сохранять и восстанавливать значения Объектов и Реквизитов на форме УП?
У управляемой формы реквизиты заведенные как реквизиты формы, при закрытии и открытии ее заново могут сохраняться и восстанавливаться, достаточно только поставить напротив галочку сохранять и в свойствах формы выбрать «АвтоматическоеСохранениеДанныхВНастройках» — Использовать.
Подробнее в этой статье Как сохранять и восстанавливать значения реквизитов на форме? и там же пример для обычных форм.
А что же делать с реквизитами, которые выступают в роли реквизитов объектов ?
у них такой настройки нет нет — напишем:
Код 1C v 8.3
&НаСервере
Процедура ВосстановитьНастройки()
КлючОбъекта = "ЗагрузкаИЗPDF_All4CF.ru";
КлючНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ОписаниеНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ИмяПользователя = "";
ЗначениеНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);
Если ТипЗнч(ЗначениеНастроек) = Тип("Соответствие") Тогда
Объект.Склад = ЗначениеНастроек.Получить("Склад");
Объект.Организация = ЗначениеНастроек.Получить("Организация");
Объект.ПутьКPDF2TXT = ЗначениеНастроек.Получить("ПутьКPDF2TXT");
Объект.ПутьКPDF = ЗначениеНастроек.Получить("ПутьКPDF");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВосстановитьНастройки();
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройки()
КлючОбъекта = "ЗагрузкаИЗPDF_All4CF.ru";
КлючНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ОписаниеНастроек = "ЗагрузкаИЗPDF_All4CF.ru";
ИмяПользователя = "";
Настройки = Новый Соответствие;
Настройки.Вставить("ПутьКPDF2TXT", Объект.ПутьКPDF2TXT);
Настройки.Вставить("ПутьКPDF", Объект.ПутьКPDF);
Настройки.Вставить("Склад", Объект.Склад);
Настройки.Вставить("Организация", Объект.Организация);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
СохранитьНастройки();
КонецПроцедуры
Открыв обработку и заполним поля закрываем ее, при следующем открытии все поля заполнены из сохраненных настроек:
Для сохранения значений реквизитов управляемой формы в 1С нужно включить свойство управляемой формы СохранениеДанныхВНастройках. После этого в окне реквизитов формы появится дополнительная колонка Сохранять данные в настройках. В этой колонке нужно поставить флаг у тех реквизитов, значения которых нужно сохранять.
После этого на форме появятся стандартные кнопки Сохранить параметры и Восстановить параметры (возможно, они будут скрыты под кнопкой Еще).
Однако, автоматическое сохранение значений доступно только для реквизитов формы. Для табличных частей флаг Сохранять данные в настройках не предусмотрен. Однако, табличные части можно преобразовать, например, в массивы и уже их сохранить в настройках формы.
Рассмотрим эту процедуру на примере формы с двумя табличными частями: ТипыЦен и ГруппыНоменклатуры. В каждой табличной части по одной колонке.
Для сохранения значений табличной части управляемой формы нам потребуется создать процедуру для события формы ПриСохраненииДанныхВНастройкахНаСервере. Как следует из названия, это событие возникает при сохранении значений реквизитов формы. И тут то мы и сможем добавить к реквизитам нашу табличную часть, предварительно преобразованную в массив.
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
//Создаем массивы из табличных частей
МассивГрупп=новый массив;
Для каждого Строка из Объект.Группы Цикл
МассивГрупп.Добавить(Строка.Группа);
КонецЦикла;
МассивЦен=новый массив;
Для каждого Строка из Объект.ТипыЦен Цикл
МассивЦен.Добавить(Строка.ТипЦены);
КонецЦикла;
//Добавляем полученные массивы в сохраняемые настройки с соответствующими именами
Настройки.Вставить(«Группа», МассивГрупп);
Настройки.Вставить(«ТипыЦен», МассивЦен);
КонецПроцедуры
Теперь осталось восстановить табличные части из массивов при загрузке настроек управляемой формы. Для этого нам потребуется процедура для события ПриЗагрузкеДанныхИзНастроекНаСервере.
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
//Очищаем табличные части, чтобы избежать дублей
Объект.Группы.Очистить();
Объект.ТипыЦен.Очистить();
//Получаем массивы из настроек по тому имени, по которому сохраняли и заносим в табличные части
Для каждого Строка из Настройки.Получить(«Группа») Цикл
НС=Объект.Группы.Добавить();
НС.Группа=Строка;
КонецЦикла;
Для каждого Строка из Настройки.Получить(«ТипыЦен») Цикл
НС=Объект.ТипыЦен.Добавить();
НС.ТипЦены=Строка;
КонецЦикла;
КонецПроцедуры
Допустим, стоит задача, необходимо в справочнике хранить дорожную карту в виде графической схемы и её описание в виде табличного документа. Для решения этой задачи необходимо создать в справочнике два реквизита с типом ХранилищеЗначений. В форме элемента справочника создать реквизиты с типами ГрафическаяСхема и ТабличныйДокумент. При открытии формы данные из реквизитов объекта загружаются в реквизиты формы, при записи выполняется обратная операция. Теперь давайте разберемся, нужно ли устанавливать для реквизитов формы свойство «Сохраняемые данные» или нет?
Для эксперимента создадим два реквизита формы с разным состоянием свойства «Сохраняемые данные» (см. рисунок 1):
- ДорожнаяКарта — тип ГрафическаяСхема, свойство «Сохраняемые данные» установлено;
- ОписаниеДорожнойКарты — тип ТабличныйДокумент, свойство «Сохраняемые данные» не установлено.
Рисунок 1. Реквизиты формы |
В режиме 1С:Предприятие откроем элемент справочника, если мы изменим описание дорожной карты, то ничего не произойдет, но, если мы изменим дорожную карту, то в заголовке формы увидим звездочку (*) — признак модифицированности (см. рисунок 2). Данная звездочка означает, что данные, сохраняемые в базу данных, изменены.
Рисунок 2. Признак модифицированности у формы |
Формы с установленным признаком модифицированности перед закрытием предупреждают пользователя о возможности потери изменений в данных и предлагают сохранить изменения (см. рисунок 3).
Рисунок 3. Вопрос о сохранении изменений |
Согласитесь, не очень приятно оказаться в ситуации, когда вы изменили данные, которые сохраняются в базу данных, и случайно закрыли форму. Если говорить в контексте задачи, то редактирование обоих реквизитов должно приводить к установке признака модифицированности у формы, что бы изменения в их данных не потерять при закрытии формы без сохранения.
Установим для пользователя на уровне прав только просмотр элементов справочника (см. рисунок 4).
Рисунок 4. Право только просмотра справочника |
В режиме 1С:Предприятие реквизит ДорожнаяКарта не доступен для редактирования в отличии от реквизита ОписаниеДорожнойКарты. Если говорить в контексте задачи, то оба реквизита формы не должны быть доступны для редактирования, так как нет смысла пользователю разрешать редактировать реквизиты формы, если элемент справочника доступен только для просмотра.
Теперь на уровне формы установим только просмотр элементов справочника, для этого в форме элемента в обработчике ПриСозданииНаСервере установим свойство ТолькоПросмотр в значение Истина.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтотОбъект.ТолькоПросмотр = Истина;
КонецПроцедуры
В режиме 1С:Предприятие реквизит ДорожнаяКарта так же не доступен для редактирования в отличии от реквизита ОписаниеДорожнойКарты. Если говорить в контексте задачи, то оба реквизита формы должны быть доступны только для просмотра, так как форма, открытая только для просмотра, не позволит сохранить изменения в их данных.
Вывод
Свойство «Сохраняемые данные» у реквизита формы следует устанавливать, если его данные сохраняются в базу данных. В рамках нашей задачи нужно для обоих реквизитов формы установить свойство «Сохраняемые данные».
Реквизит с установленным свойством «Сохраняемые данные»:
- Устанавливает признак модифицированности у формы после редактирования;
- Не доступен для редактирования при отсутствии права редактирования объекта;
- Не доступен для редактирования в форме, которая открыта только на просмотр.
Как сохранить Значения элементов при закрытии формы и восстановить их при открытии формы?
Это можно сделать через СохранитьЗначения(), ВосстановитьЗначение():
Код 1C v 8.х
СохранитьЗначение("СрокИсполненияЗаказа", СрокИсполнения);
СохранитьЗначение("СкладПоУмолчанию", МестоХранения);
СрокИсполнения = ВосстановитьЗначение("СрокИсполненияЗаказа"));
Но у этого способа, одно НО — Сохраненые значения будут доступны только на там компьютере, на котором их сохранили!
А чтобы эти значения были доступны с любого компьютера, их нужно хранить в базе, например в константах с типом Хранилище значения:
Перебирая все элементы формы, выбрать только поля ввода и записать их значения в структуру.
Потом структуры записываем в константу:
Код 1C v 8.х
Процедура КнопкаСохранитьНажатие(Кнопка)
ЭлСтр = Новый Структура;
Для Каждого Элем Из ЭлементыФормы Цикл
//Сохранаем только те элементы, у которых можно получить Значение
//Попытка
// ЭлСтр.Вставить(Элем.Имя, Элем.Значение);
//Исключение КонецПопытки; //у элемента нет Значения
//Так лучше
Если ТипЗнч(Элем) = Тип("ПолеВвода") Тогда
ЭлСтр.Вставить(Элем.Имя, Элем.Значение);
КонецЕсли;
КонецЦикла;
Константы.MES_ДопСоглашения.Установить(Новый ХранилищеЗначения(ЭлСтр));
КонецПроцедуры
Процедура ПриОткрытии()
//Заполним значения на форме из структуры полученной из хранилища значений
Попытка
ЭлСтрХранЗнач=Константы.MES_ДопСоглашения.Получить();
ЭлСтр=ЭлСтрХранЗнач.Получить();
Для Каждого Элем из ЭлСтр Цикл
ЭлементыФормы[Элем.Ключ] = Элем.Значение;
КонецЦикла;
Исключение КонецПопытки;
КонецПроцедуры
Как сохранять и восстанавливать значения реквизитов на форме?
Информация взята с сайта http://helpf.pro
Хотите узнать больше по этому вопросу?
Подпишитесь на нашу рассылку новостей
Подписаться
Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:
Предложить статью
Сохранение значений реквизитов форм.
Posted: 26 октября, 2017 in Введение в конфигурирование в системе «1с:Предприятие 8» .
Частенько приходится делать некий отчёт или обработку и затем проверять её работу. При этом постоянно вводить значение каких-нибудь отборов.
Между тем в типовых формах существуют кнопки «сохранить значение», «восстановить значение».
Конечно можно прописывать подстановку просто в коде типа:
Процедура ПриОткрытии()
Склад=Справочники.Склады.НайтиПоНаименованию(«НаименованиеКакое нить»);
КонецПроцедуры
Но можно задействовать уже существующий механизм. Для этого в свойствах формы поставить галочку «Сохранять значение», в поле «Сохраняемые значения» выбрать необходимые реквизиты, и поставить галочку «ВосстанавливатьЗначенияПриОткрытии»
В результате увидим две кнопки как в типовом отчёте:
Легко. Просто где вот простому смертному это увидеть. Типа учитесь… Было бы чему!