Имя: Пароль:
1C
1С v8
В каком виде реквизита документа хранить настройки отчета создавшего его
,
0 Cerera
 
06.08.12
17:17
Документ создаётся при помощи обработки, в которой задаются входные условия: период, отборы и прочие галочки на форме. Столкнулись с проблемой, что манагеры тупят и неправильно иногда выставляют настройки и в результате в документе потом не находят нужных контрагентов, номенклатуру в табличной части. Начинают грешить на обработку, но обработка ещё при формировании документа, создаёт отчет, где отображается табличная часть документа. Вот сейчас возникла идея сохранять настройки отчета в самом документе, чтоб можно было их посмотреть если что. Хочу посоветоваться в каком виде хранить эти настройки. Табличную часть чтоли создать с тремя  полями "НазваниеПараметра, значение параметра, вид отбора". Ну а если значения отбора будут "В группе из списка", то бишь очень много элементов справочника содержать, то как быть? одним словом нужен совет. Правда есть ещё вариант - выводить список параметров в mxl отчет и прикреплять их к документу.
1 Naumov
 
06.08.12
17:20
ЗначениеВСтрокуВнутр...
2 х86
 
06.08.12
17:21
(0)в свойствах храни
3 Cerera
 
06.08.12
17:21
(1)тоесть создать таблицу значений, в неё считать все входные данные, а потом сохранить эту таблицу через ЗначениеВСтрокуВнутр? и при необходимости извлекать эти данные через обратную процедуру?
4 DrShad
 
06.08.12
17:22
(1) не спасет от удаления ссылки содержащейся в отборе
5 Cerera
 
06.08.12
17:22
(2)в каких свойствах?
6 х86
 
06.08.12
17:24
(5)конфа типовая? в типовой есть механизм свойств
7 Cerera
 
06.08.12
17:24
(2)ааа. значения свойств объектов.
8 Cerera
 
06.08.12
17:24
(6)да да. есть. конфа на УТ построена.
9 DrShad
 
06.08.12
17:29
и как в свойства запихнуть параметр, вид сравнения и значение параметра?
10 х86
 
06.08.12
17:32
(9)соглашусь, не простая задача
и если еще задуматься о ссылочной целостности  о_О
11 Михаил Козлов
 
06.08.12
17:32
Сохранял отборы построителя в реквизите с типом ХранилищеЗначений.
12 Naumov
 
06.08.12
18:23
(4) От этого ничто не спасет.
13 Михаил Козлов
 
06.08.12
18:27
(12) Может быть я чего-то не понимаю, но сохранение отборов построителя в реквизите типа ХранилищеЗначения вроде бы адекватно.
14 hohol
 
06.08.12
20:17
для типовой


Процедура СохранитьНастройки()
   
   Перем СохраненнаяНастройка;
   
   СформироватьСтруктуруДляСохраненияНастроек(СохраненнаяНастройка);
   
   СтруктураНастройки = Новый Структура;
   СтруктураНастройки.Вставить("Пользователь",глЗначениеПеременной("глТекущийПользователь"));
   СтруктураНастройки.Вставить("ИмяОбъекта", "Обработка." + Строка(ЭтотОбъект));
   СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
   СтруктураНастройки.Вставить("СохраненнаяНастройка", СохраненнаяНастройка);
   СтруктураНастройки.Вставить("ИспользоватьПриОткрытии", Ложь);
   СтруктураНастройки.Вставить("СохранятьАвтоматически", Ложь);
   
   Результат = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);
   
   Если Результат <> Неопределено Тогда
       
       мТекущаяНастройка = Результат;
       
   Иначе
       
       мТекущаяНастройка = СтруктураНастройки;
       
   КонецЕсли;
   
КонецПроцедуры // СохранитьНастройки()
15 hohol
 
06.08.12
20:18
восстановление



Функция ВосстановитьНастройкиИзСтруктуры(СтруктураСНастройками)
   
   Перем СохраненныеНастройкиПостроителя;
   
   Если ТипЗнч(СтруктураСНастройками) = Тип("Структура") Тогда
       
       Для каждого Настройка из СтруктураСНастройками Цикл
           
           Если Настройка.Ключ = "СохраненноеЗначениеНастройкиПостроителя" Тогда
               
               СохраненноеЗначениеНастройкиПостроителя = Настройка.Значение;
               
           КонецЕсли;    
           Если ЭтотОбъект.Метаданные().Реквизиты.Найти(Настройка.Ключ) <> Неопределено Тогда
               ЭтотОбъект[Настройка.Ключ] = Настройка.Значение;
           КонецЕсли;
       КонецЦикла;
       
   КонецЕсли;
   
   НастройкиПостроителя = ?(ПустаяСтрока(СохраненноеЗначениеНастройкиПостроителя), Неопределено, ЗначениеИзСтрокиВнутр(СохраненноеЗначениеНастройкиПостроителя));
   ЗаполнитьНачальныеНастройки(НастройкиПостроителя);
   
   Возврат Истина;
   
КонецФункции // ВосстановитьНастройкиИзСтруктуры()


Функция ВосстановитьНастройки()
   
   Перем СохраненнаяНастройка;
   
   СтруктураНастройки = Новый Структура;
   СтруктураНастройки.Вставить("Пользователь",глЗначениеПеременной("глТекущийПользователь"));
   СтруктураНастройки.Вставить("ИмяОбъекта", "Обработка." + Строка(ЭтотОбъект));
   СтруктураНастройки.Вставить("НаименованиеНастройки", ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));
   
   Результат = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);
   
   Если Результат <> Неопределено Тогда
       
       мТекущаяНастройка = Результат;
       ВосстановитьНастройкиИзСтруктуры(Результат.СохраненнаяНастройка);
       
   Иначе
       
       мТекущаяНастройка = СтруктураНастройки;
       
   КонецЕсли;
   
   
КонецФункции // ВосстановитьНастройки()
16 hohol
 
06.08.12
20:19
все есть в типовой, нет нужно велосипед придумать.
17 AndOne
 
07.08.12
00:23
(0) Ни когда не понимал вашего подхода, при котором приходится придумывать изощренные способы победить пользователей. Почему манагеры могут жаловаться на обработку, а программисты не могут жаловаться на манагеров.

я прдедалагаю решать вопросы по-человечески.
18 mistеr
 
07.08.12
04:12
(17) +1 "решать вопросы по-человечески". По-человечески - это в данном случае значит сделать такой интерфейс, в котором манагеры не будут тупить и путаться.
19 AndOne
 
07.08.12
10:06
(18) решений достаточно.

На самом деле самое главное изменить "пагубную" практику, при которой программа всегда виновата. Согласен, мы тоже ошибаемся, но постоянно сваливать свои огрехи на программу, как минимум не корректно.