Сохраняемые данные реквизит формы 1с программно

В этой статье разберем, как работать с сохранением данных на форме в 1С 8.3.

Сохраняемые данные формы 1С

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

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

Форма обработки 1С

Это поля Контрагент и Цена.

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

Первое. У свойства формы  «Автоматическое сохранение данных в настройках» установить значение «Использовать».

 Свойство управляемой формы 1С Автоматическое сохранение данных в настройках

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

Свойство Сохранить реквизитов управляемой формы 1С

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

Хранилище настроек в 1С

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

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

Свойство управляемой формы Хранилище данных настроек

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

Свойство Сохраняемые данные реквизита управляемой формы

После таких изменений, у формы в группе Ещё появятся команды «Сохранить параметры» и «Восстановить параметры».

Команды управляемой формы Сохранить параметры и Восстановить параметры

Теперь мы можем сохранить любую комбинацию реквизитов Контрагент – Цена.

Команда управляемой формы Сохранить параметры
Команда управляемой формы Сохранить параметры

И можем восстановить нужную комбинацию в любой момент работы с формой, а не только при открытии.

Команда управляемой формы Восстановить параметры
Команда управляемой формы Восстановить параметры

Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

Основы разработки в 1С такси
  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 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

УФ Как программно установить «Сохранение» у реквизита формы?

Я
   Rounder

15.10.12 — 19:22

УФ

Как программно установить «Сохранение» у реквизита формы?

  

Партнерская программа EFSOL Oblako

   News

1 — 15.10.12 — 19:36

У формы стоит Автоматическое сохранение?

   Rounder

2 — 15.10.12 — 19:41

Да

   Rounder

3 — 15.10.12 — 19:42

Нужно именно программно создать реквизит формы и установить у него «Сохранение» в Истина.

   Rounder

4 — 15.10.12 — 21:11

Актуально

   SerMaxim

5 — 15.10.12 — 21:18

Новый РеквизитФормы()

   Rounder

6 — 15.10.12 — 21:21

(5) Как создать реквизит программно я знаю. Как у него программно установить «Сохранение» — не знаю.

   mxs089

7 — 16.10.12 — 02:43

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

   zladenuw

8 — 16.10.12 — 02:47

то кодом использовать типовое нельзя ?

   zladenuw

9 — 16.10.12 — 02:49

хм. в типовой такое.

// Процедура сохраняет настройки формы.

//

// Параметры:

//  СохраненнаяНастройка       — СправочникСсылка.СохраненныеНастройки — сохраняемая настройка.

//  СохраняемыеНастройки — параметры настройки формы.

//

Процедура СохранитьНастройкуОбъекта(СохраненнаяНастройка, СохраняемыеНастройки) Экспорт

   ОбъектСохраненнаяНастройка = СохраненнаяНастройка.ПолучитьОбъект();

   
   Если СохраненнаяНастройка.Предопределенный тогда

       СохраняемыеНастройки.Вставить(«Изменялась», истина);

   КонецЕсли;

   
   ОбъектСохраненнаяНастройка.ХранилищеНастроек = Новый ХранилищеЗначения(СохраняемыеНастройки);

   
   Попытка

       ОбъектСохраненнаяНастройка.Записать();

   Исключение

       ОбщегоНазначения.СообщитьОбОшибке(НСтр(«ru=’Настройка формы не записана:’;uk=’Настройка форми не записана:'») + Символы.ПС + «- » + ОписаниеОшибки());

   КонецПопытки;

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

   5 Элемент

10 — 16.10.12 — 09:25

(3) программно создал, программно и сохраняй

   Rounder

11 — 16.10.12 — 09:45

(7) Вопрос, поднятый в теме и возник то из-за желания обойтись без интерактивного создания реквизитов формы.

(10) Не все так просто. Нужна обработка, не требующая никаких (кроме программных) изменений форм. В т.ч. и интерактивного добавления реквизитов. Создания хранилищ и т.п.

Посему реализуется сохранение через стандартные механизмы. А именно через ПриСохраненииДанныхВНастройкахНаСервере(Настройки), где я к уже сохраняемым настройкам добавляю свои.

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

Может есть более «красивые» методы — буду рад подсказке.

   Rounder

12 — 16.10.12 — 09:51

(9) Сейчас посмотрю

   Rounder

13 — 16.10.12 — 10:07

(9) Не подойдет — хранение настроек в справочнике, а не в системных таблицах.

   Aprobator

14 — 16.10.12 — 10:25

Сохранение программно нарисованного реквизита формы средствами платформы? Как такое в голову только приходит.

   Aprobator

15 — 16.10.12 — 10:26

можно подумать этот реквизит формы при следующем ее открытии у нее останется.

   Rounder

16 — 16.10.12 — 10:35

А мне не нужно чтобы он оставался.

   Rounder

17 — 16.10.12 — 10:37

Создали реквизит, загрузили в него данные, отработали с формой, сохранили данные реквизита, закрыли форму.

   Rounder

18 — 16.10.12 — 13:27

Значит нельзя — жаль.

   Aprobator

19 — 16.10.12 — 13:28

все зависит от самой задачи. РС с ресурсом тип ХранилищеЗначений ну и соответствующие измерения, для отлова принадлежности. Но, имхо, дурь это.

   Rounder

20 — 16.10.12 — 13:34

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

   Aprobator

21 — 16.10.12 — 13:36

типовое сохранение настроек отчетов и объектов не катит?

   Aprobator

22 — 16.10.12 — 13:36

или в УФ такого нет

   Aprobator

23 — 16.10.12 — 13:36

тоже сделано через РС.

   Rounder

24 — 16.10.12 — 13:39

В УФ есть то что описано в (9). Но там настройки сохраняются в справочнике. А это отдельный объект. Далее уже на универсальность не претендуем…

   Aprobator

25 — 16.10.12 — 13:41

(24) ну и? В хранилище можно запихать что хочешь и достать что хочешь, что еще надо?

   Rounder

26 — 16.10.12 — 13:43

(25) Надо не задумываться, есть ли созданное хранилище в той конфигурации куда добавляется обработка и т.д.

Т.е. использовать штатный механизм (и хранилище) 1С, который они используют для хранения по умолчанию.

   Aprobator

27 — 16.10.12 — 13:45

угу — еще бы от версии платформы отвязаться.

   Rounder

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_ДопСоглашения.Получить();
ЭлСтр=ЭлСтрХранЗнач.Получить();
Для Каждого Элем из ЭлСтр Цикл
ЭлементыФормы[Элем.Ключ] = Элем.Значение;
КонецЦикла;
Исключение КонецПопытки;
КонецПроцедуры


Виртуальный 1С помощник


Как сохранять и восстанавливать значения реквизитов на форме?

Информация взята с сайта http://helpf.pro

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

Сохранение значений реквизитов форм.


Posted: 26 октября, 2017 in Введение в конфигурирование в системе «1с:Предприятие 8» .

Частенько приходится делать некий отчёт или обработку и затем проверять её работу. При этом постоянно вводить значение каких-нибудь отборов.

Между тем в типовых формах существуют кнопки «сохранить значение», «восстановить значение».

Конечно можно прописывать подстановку просто в коде типа:

Процедура ПриОткрытии()
Склад=Справочники.Склады.НайтиПоНаименованию(«НаименованиеКакое нить»);
КонецПроцедуры

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

В результате увидим две кнопки как в типовом отчёте:

форма1

Легко. Просто где вот простому смертному это увидеть. Типа учитесь… Было бы чему!

Понравилась статья? Поделить с друзьями:
  • Состав реквизитов документов в делопроизводстве
  • Соц сети список популярных в россии для бизнеса
  • Соц страхование от несчастных случаев реквизиты
  • Соцзащита 250 тысяч на открытие бизнеса условия
  • Соцзащита балашиха часы работы официальный сайт