Имя: Пароль:
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) решений достаточно.

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