Чтобы сохранить значения реквизитов внешней обработки нужно использовать КомпоновщикНастроекКомпоновкиДанных.
Создаем в обработке реквизит КомпоновщикНастроекКомпоновкиДанных
В форму обработки вставляем следующий код (Листинг):
#область СохранениеНастроек
&НаСервере
Процедура СохранитьДанныеВНастройках()
Настройки = Новый Соответствие;
ЗаполнитьНастройкиПриСохраненииНаСервере(Настройки);
ХранилищеНастроекДанныхФорм.Сохранить(ЭтаФорма.ИмяФормы,, Настройки);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНастройкиПриСохраненииНаСервере(Настройки)
Если Настройки = Неопределено Тогда
Настройки = Новый Соответствие;
КонецЕсли;
//Сюда вставляем значения реквизитов которые нужно сохранить
//Настройки.Вставить(«», );
//Настройки.Вставить(«», );
//Настройки.Вставить(«», );
//Так сохраняем табличные части
//ТЗт = Новый ТаблицаЗначений;
//ТЗт.Колонки.Добавить(«»);
//ТЗт.Колонки.Добавить(«»);
//Для Каждого СТР ИЗ Цикл
// НовСтр = ТЗт.Добавить();
// НовСтр. = СТР.;
// НовСтр. = СТР.;
//КонецЦикла;
//Настройки.Вставить(«ТЗ», ТЗт);
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьНачалоЭлемента(«Отборы»);
СериализоватьОтбор(Объект.Компоновщик.Настройки.Отбор.Элементы, ЗаписьXML);
ЗаписьXML.ЗаписатьКонецЭлемента();
ХранилищеНастроек = ЗаписьXML.Закрыть();
Настройки.Вставить(«Отбор», ХранилищеНастроек);
КонецПроцедуры
&НаСервере
Процедура ВосстановитьНастройки(Настройки)
Если ТипЗнч(Настройки) = Тип(«Соответствие») Тогда
//Данной конструкцией востанавливаем реквизиты
//Если Настройки.Получить(«СтатьиЗатрат») <> Неопределено Тогда
//
// СтатьиЗатрат = Настройки.Получить(«СтатьиЗатрат»);
//
//КонецЕсли;
//Этой конструкцией востанавливаем значения табличных частей
//Если Настройки.Получить(«СтатьиЗатрат») <> Неопределено Тогда
//
// Тч.Загрузить(Настройки.Получить(«СтатьиЗатрат»));
//
//КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СериализоватьОтбор(пОтбор, ЗаписьXML) Экспорт
Для Каждого цЭлементОтбора Из пОтбор Цикл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, цЭлементОтбора);
КонецЦикла;
КонецПроцедуры // СериализоватьОтбор()
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Настройки = ХранилищеНастроекДанныхФорм.Загрузить(ЭтаФорма.ИмяФормы);
ВосстановитьНастройки(Настройки);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
СохранитьДанныеВНастройках();
КонецПроцедуры
#КонецОбласти
18.10.11 — 11:13
САБЖ
1 — 18.10.11 — 11:15
КНОПКОЙ
2 — 18.10.11 — 11:15
в настройках пользователей
3 — 18.10.11 — 11:15
(1) Какой?:)
4 — 18.10.11 — 11:17
(2) А это как? Можешь дать пример кода?
5 — 18.10.11 — 11:21
а форма-то какая?
6 — 18.10.11 — 11:21
Вот простейший пример
Процедура ПриОткрытии()
// Восстанавливаем значение
ЗапрашиватьЦену = ВосстановитьЗначение(«ЗапрашиватьЦенуПриПодборе»);
…
Процедура ПриЗакрытии()
// Сохраняем значение
Если ЭлементыФормы.ЗапрашиватьЦену.Доступность Тогда
СохранитьЗначение(«ЗапрашиватьЦенуПриПодборе», ЗапрашиватьЦену);
КонецЕсли;
7 — 18.10.11 — 11:22
(5) Управляемая конечно
8 — 18.10.11 — 11:23
(7) А ты когда об этом собирался рассказать?
9 — 18.10.11 — 11:24
(6) В управляемых такого нет
(8) тупанул чуток)
Написал 8.2 а дальше не сообразил)))
10 — 18.10.11 — 11:24
чё-то старички сегодня жгут
11 — 18.10.11 — 11:25
(10) /потупив взор ковыряю ножкой в полу/
12 — 18.10.11 — 11:26
св-ва формыСохранениеДанныхВНастройках, АвтоматическоеСохранениеДанныхВНастройках
13 — 18.10.11 — 11:32
(12) Дык в том то и дело что не работает ни черта эта настройка)
Я наверное её не правильно готовлю.
Включил:
ПутьКИнформационнойБазе «Использовать»
СохранениеДанныхВНастройках «Использовать список»
Что там ещё надо настраивать?
14 — 18.10.11 — 11:34
у мну работает
15 — 18.10.11 — 11:35
(14) Только с такими настройками и все? Или создавал хранилище настроек?
16 — 18.10.11 — 11:35
без хранилища работает, со списком
17 — 18.10.11 — 11:36
(16) Млять, что же блин ни так.
18 — 18.10.11 — 11:36
а что за ПутьКИнформационнойБазе — я у себя такого не наблюдай в палитре св-в
19 — 18.10.11 — 11:38
(18) Да это я вставил то что было в буфере)
там должно было быть написано «АвтоматическоеСохранениеДанныхВНастройках»
)))
Скачу между мониторами тут, запутался.
20 — 18.10.11 — 11:39
ну у тебя хоть настройка твоя в списке появляется, или нет?
галочки на реквизитах нажал?
21 — 18.10.11 — 11:41
(20) Всё понял в чем косяк.
У меня все реквизиты это реквизиты Объекта.
Вынес эти реквизиты как реквизиты формы и стало сохраняться.
А реквизиты объекта получается не сохранить.
22 — 18.10.11 — 11:43
+ 21 нихрена. Галку на реквизите формы ставлю.
Все одно блин не сохраняет.
23 — 18.10.11 — 11:44
(20) «галочки» ты имел ввиду «Сохранять данные»?
24 — 18.10.11 — 11:44
(21) у мну сохраняет
25 — 18.10.11 — 11:45
(23) второе ТП, сверху справа
колонка «Сохранение»
26 — 18.10.11 — 11:46
(24) Всё. Теперь и у меня пошло.
27 — 18.10.11 — 11:46
(25) Да, а я ставил в самом реквизите.
Спасибо, разобрался)
28 — 18.10.11 — 11:47
а где в реквизите объекта галка сохранения?
29 — 18.10.11 — 11:49
(28) В реквизите формы
30 — 18.10.11 — 11:49
+ 29 «сохраняемые данные»
31 — 18.10.11 — 11:53
(30) дык это, батенька, совсем на другую тему песня
модифицированность, только просмотр и т.д.
32 — 18.10.11 — 11:54
(31) Уже понял)))))
33 — 18.10.11 — 11:55
советую учесть сразу
//
// Некоторые элементы формы, например ТаблицаФормы могут не восстанавливаться и даже блокировать вызов ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки),
// если с момента последнего сохранения они изменили свой тип или состав, т.е. в случае таблицы формы есть сохраненное значение с одним составом колонок,
// а после добавления или переименования колонки с установленным признаком «Сохранять» для таблицы уже не вызывается ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки).
// В этом методе можно модифицировать состав колонок сохраненной таблицы в соотвевествии с текущим составом.
//
Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)
Aswed
34 — 18.10.11 — 11:56
(33) Спасибо, пригодится.
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);
Настройки.Вставить("Склад", Объект.Склад);
Настройки.Вставить("Организация", Объект.Организация);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
СохранитьНастройки();
КонецПроцедуры
Открыв обработку и заполним поля закрываем ее, при следующем открытии все поля заполнены из сохраненных настроек:
есть внешняя обработка. мне нужно, чтобы она хранила определенное значение, которое задается пользователем. причем вариант с сохранением настроек не подходит, нужно чтобы независимо от пользователя, который ее открыл, значение хранилось такое, какое его задали, при последнем открытии… если непонятно, то вот на примере документа. у документа есть реквизит, который хранится независимо под каким пользователем этот документ открывают и с какого компутера. нужно просто зайти в документ изменить его реквизит, записать документ и значение этого реквизита будет там хранится до тех пор, пока его снова кто-нить не изменит. вот нужно то же самое для внешней обработки придумать, это возможно?
В обработке пытаться что-то хранить — это равно, что гланды через жопу. Константу добавь для своего значения.
регистр или хранилище значений, на крайний случай внешний файл… вопрос — а если с обработкой будут работать несколько пользователей одновременно?
учи матчасть — то, что ты хочешь, невозможно
Можно попробовать создавать файл (например, XML) записывать в каталог базы и туда сохранять значения полей внешней обработки. Реквизиты внешней обработки хранить в файле 1Cv8.1CD не получится, т.к. внешняя обработка не является частью конфигурации. Если внеш-юю обраб. включить в конфигурацию, то проблем не будет.
ЗначениеВФайл Тебе поможет
Если внешняя обработка будет хранится как элемент справочника внешних обработок — то почему вместе с ней не хранит и настройки.. можно.. в Хранилище значений двоичные данные например…
пасиба биг, да это действительно самый простой и верный способ. всем кто откликнулся пасиба тоже =) нет ничего невозможного =)
Тэги:
Комментарии доступны только авторизированным пользователям
22 / 22 / 4 Регистрация: 17.10.2009 Сообщений: 281 |
|
1 |
|
Сохранить значение реквизитов и табличной части внешней обработки «куда-то» что бы потом открыть20.06.2013, 13:08. Показов 16908. Ответов 6
Здравствуйте, Форумчане) Есть одна внешняя обработка. Которая имеет несколько реквизитов (тип СписокЗначений) и табличную часть. Задача: как реализовать сохранение табличной части и значений реквизитов с возможностью продолжения работы после выключения внешней обработки (и даже 1с)? П.С. не в txt же записывать и читать потом) 1с 8.2 — не управляемые формы
0 |
Dethmontt Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
||||
20.06.2013, 14:50 |
2 |
|||
; В синтаксис помощнике написано как пользоваться Добавлено через 1 минуту
0 |
22 / 22 / 4 Регистрация: 17.10.2009 Сообщений: 281 |
|
20.06.2013, 14:59 [ТС] |
3 |
Спасибо, попробую. Если все будет ок, то хорошо. А если не ок то буду создавать новый регистр сведений
0 |
Модератор 3708 / 2905 / 572 Регистрация: 10.03.2011 Сообщений: 11,442 Записей в блоге: 1 |
|
20.06.2013, 15:05 |
4 |
Можешь еще почитать про ХранилищеНастроек
0 |
22 / 22 / 4 Регистрация: 17.10.2009 Сообщений: 281 |
|
20.06.2013, 16:15 [ТС] |
5 |
Там проблема не с реквизитами, а с табличной частью документа. Количество колонок динамическое. Причем есть два списка от значений которых формируются колонки.
0 |
7 / 10 / 1 Регистрация: 11.02.2013 Сообщений: 246 |
|
09.12.2015, 14:54 |
6 |
Пытаюсь решить ту же проблему. Пробовал и ХранилищеНастроек и СохранитьЗначение Восстановить значение. Создал табличную часть форму из конструктора по ней создал. Создашь на этой форме строку табличной части. Сохраняешь — ошибок при сохранении нет. Но когда восстанавливаешь всегда получаешь Неопределено.
0 |
7 / 10 / 1 Регистрация: 11.02.2013 Сообщений: 246 |
|
10.12.2015, 16:28 |
7 |
решить проблему удалось только с помощью ЧтениеXML, ЗаписьXML по записи по полю создавать строку/парсить и сохранять xml-строку.
0 |
Для сохранения значений реквизитов управляемой формы в 1С нужно включить свойство управляемой формы СохранениеДанныхВНастройках. После этого в окне реквизитов формы появится дополнительная колонка Сохранять данные в настройках. В этой колонке нужно поставить флаг у тех реквизитов, значения которых нужно сохранять.
После этого на форме появятся стандартные кнопки Сохранить параметры и Восстановить параметры (возможно, они будут скрыты под кнопкой Еще).
Однако, автоматическое сохранение значений доступно только для реквизитов формы. Для табличных частей флаг Сохранять данные в настройках не предусмотрен. Однако, табличные части можно преобразовать, например, в массивы и уже их сохранить в настройках формы.
Рассмотрим эту процедуру на примере формы с двумя табличными частями: ТипыЦен и ГруппыНоменклатуры. В каждой табличной части по одной колонке.
Для сохранения значений табличной части управляемой формы нам потребуется создать процедуру для события формы ПриСохраненииДанныхВНастройкахНаСервере. Как следует из названия, это событие возникает при сохранении значений реквизитов формы. И тут то мы и сможем добавить к реквизитам нашу табличную часть, предварительно преобразованную в массив.
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
//Создаем массивы из табличных частей
МассивГрупп=новый массив;
Для каждого Строка из Объект.Группы Цикл
МассивГрупп.Добавить(Строка.Группа);
КонецЦикла;
МассивЦен=новый массив;
Для каждого Строка из Объект.ТипыЦен Цикл
МассивЦен.Добавить(Строка.ТипЦены);
КонецЦикла;
//Добавляем полученные массивы в сохраняемые настройки с соответствующими именами
Настройки.Вставить(«Группа», МассивГрупп);
Настройки.Вставить(«ТипыЦен», МассивЦен);
КонецПроцедуры
Теперь осталось восстановить табличные части из массивов при загрузке настроек управляемой формы. Для этого нам потребуется процедура для события ПриЗагрузкеДанныхИзНастроекНаСервере.
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
//Очищаем табличные части, чтобы избежать дублей
Объект.Группы.Очистить();
Объект.ТипыЦен.Очистить();
//Получаем массивы из настроек по тому имени, по которому сохраняли и заносим в табличные части
Для каждого Строка из Настройки.Получить(«Группа») Цикл
НС=Объект.Группы.Добавить();
НС.Группа=Строка;
КонецЦикла;
Для каждого Строка из Настройки.Получить(«ТипыЦен») Цикл
НС=Объект.ТипыЦен.Добавить();
НС.ТипЦены=Строка;
КонецЦикла;
КонецПроцедуры