Проблема восстановления настроек в форме обработки

1. zaxarovsky 111 11.10.13 18:53 Сейчас в теме
Подскажите как бороться с проблемкой?
При восстановлении настроек в форме стандартным способом не восстанавливается состав колонок (если количество колонок различное у текущей ТаблицыЗначений и у той, которая сохранена в настройке).
Есть идеи?
Я извернулся только через "повторное" восстановление настройки. Но это как-то некрасиво.
"Хранилища настроек" не предлагать.
Обработка прилагается.
Прикрепленные файлы:
ВнешняяОбработка1.epf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
18. amaksimov 15.10.13 11:17 Сейчас в теме
может быть, поможет ЗначениеВСтрокуВнутр и пожать ещё (со сжатием)
и куда-нибудь его потом и обратно
zaxarovsky; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
13. Lama12-1 8 15.10.13 10:20 Сейчас в теме
(1)ИМХО. Сохраненные настройки - зло.
Причина.
Структура настроек отчета, списка, обработки, и т.д. могут изменяться в процессе эволюции. Автоматически можно попробовать сразу после обновления провести необходимую модификацию настроек. Но есть одно "НО".
Не всегда (а точнее в большем количестве случаев), можно однозначно определить что ожидает пользователь от сохраненных настроек, при новой их структуре. Как следствие, решение о восстановлении настроек обычно предоставляется пользователю.
Один из альтернативных вариантов решения данной проблемы - делать жесткие отчеты, обработки, и т.д., т.е. что б пользователь всегда видел только то, что ему нужно. Но здесь возникает другая проблема. Стоимость поддержки всего этого зоопарка.
Поэтому приходится искать компромисс между квалифицированными пользователями, способными восстановить настройки самостоятельно, и затратами на поддержания работоспособности различных жестких вариантов отчетов (обработок, списков и т.д.)
amaksimov; +1 Ответить
15. zaxarovsky 111 15.10.13 10:29 Сейчас в теме
(13) Lama12-1,
Вау! Не ожидал такого :).
20. Legavaz 705 15.10.13 11:41 Сейчас в теме
если конфигурация типовая, можно прикрутить механизм типового хранилища, РС (Сохраненные настройки).
Типовая?
(13) согласен полностью.
если не типовая то лучше заменить на хранение через внешний файл. там вообщем то немного нужно будет добавить.
по поводу ошибок,
много лишнего кода,
переназначение переменных, и последующий анализ и их сравнение.

все это следствие не продуманного построения алгоритма задачи, но это мое мнение и оно конечно имхо. )

Видно, что пишешь не давно, на мат часть. не обижайся)!
21. zaxarovsky 111 15.10.13 12:09 Сейчас в теме
(20) Legavaz,
к конфе не привязываюсь, обработка должна работать везде

по поводу кода... да, наверное не оптимально написано.
но это еще и следствие тех костылей, которые пришлось поставить

вопрос в другом - как обойти конкретное технологическое ограничение

кстати, никто не в курсе где хранятся эти стандартные настройки, в каком хранилище? и можно ли к ним доступ как-то получить? типа, коллекция настроек...
23. Legavaz 705 15.10.13 12:21 Сейчас в теме
(21) вот
	Выборка			=	ХранилищеСистемныхНастроек.Выбрать();
	Пока Выборка.Следующий() Цикл
          //тут их можно обработать
	КонецЦикла;

amaksimov; +1 Ответить
25. zaxarovsky 111 15.10.13 12:45 Сейчас в теме
(23) Legavaz,
нет, это не те настройки. нет тут тех, которые по кнопочкам Сохр/Восст.
2. zaxarovsky 111 14.10.13 11:29 Сейчас в теме
Никто не хочет ответить?
3. tango 543 14.10.13 11:52 Сейчас в теме
не понятно, что значит
извернулся только через "повторное" восстановление


для того, чтобы появились "потерянные колонки", стоит попробовать "СоздатьКолонки()" после восстановления значения таблицы
amaksimov; +1 Ответить
4. zaxarovsky 111 14.10.13 12:22 Сейчас в теме
(3) tango,
"повторное" восстановление... это значит второй раз нажать кнопочку "Восстановить" (и после того как я программно добавляю нужное/потерянное число колонок к текущей таблице).

для того, чтобы появились "потерянные колонки", стоит попробовать "СоздатьКолонки()" после восстановления значения таблицы
- тут как раз и не получается. Пробовал, не создаются, так как при восстановлении они "теряются", если их было больше, чем в текущей таблице.
5. forev8 14.10.13 13:24 Сейчас в теме
может в структуру запихнуть состав колонок с помещением в хранилище
6. zaxarovsky 111 14.10.13 13:46 Сейчас в теме
(5) forev8,
ну, вот я хотел сначала без хранилища как-то попробовать решить...
7. Legavaz 705 14.10.13 18:09 Сейчас в теме
много ошибок, описывать долго, просто поправил чтоб работало, а там сам смотри, сравнивай что не так.
Прикрепленные файлы:
ВнешняяОбработка1.epf
8. zaxarovsky 111 14.10.13 18:34 Сейчас в теме
(7) Legavaz,
хм,
1. не понял - каких ошибок?
2. что вы мне прислали?

мне нужно, чтобы восстанавливалась не пустая таблица, а со всеми сохраненными значениями в ячейках.
9. thenroach 4 15.10.13 08:46 Сейчас в теме
можно попробовать сохранять в некий невидимый строковый реквизит таблицу значений.
Этот строковый реквизит как раз сохранять при закрытии формы.
А при открытии из него восстанавливать :)
kievanton; amaksimov; +2 Ответить
12. zaxarovsky 111 15.10.13 10:18 Сейчас в теме
(9) thenroach,
этот вариант тоже некрасивый с моей точки зрения
лучше уж невидимое табличноеполе с максимальным количеством колонок создать и восстанавливать из него
10. Legavaz 705 15.10.13 09:34 Сейчас в теме
не восстанавливается состав колонок, понял не как содержимое.
подправил обработку теперь все что нужно восстанавливает. но следует понимать что данное решение не подходит для управляемых форм

вообщем все сводится

Процедура ПередСохранениемЗначений(Отказ)
	
	СтруктураСохранения	=	Новый Структура("Порядок,ТабЗнач",Порядок,Таб);
	
	СохранитьЗначение("УчиМатЧасть)",СтруктураСохранения);
	
КонецПроцедуры

Процедура ПослеВосстановленияЗначений()   
	
	Структура	=	ВосстановитьЗначение("УчиМатЧасть)");
	
	Если ТипЗнч(Структура)=	тип("Структура") Тогда		
		Таб			=	Структура.ТабЗнач;
		Порядок		=	Структура.Порядок;	
		ЭлементыФормы.Таб.СоздатьКолонки();			
	КонецЕсли;
	
	
КонецПроцедуры


Показать
Прикрепленные файлы:
ВнешняяОбработка1.epf
14. zaxarovsky 111 15.10.13 10:24 Сейчас в теме
(10) Legavaz,
матчасть знаю, в принципе
В этой настройке "УчиМатЧасть)" будет сохраняться только последние данные таблицы.
Попробуйте подряд восстановить из нескольких ранее сохраненных Настроек - увидите эффект. Воостановится только ваш последний вариант таблицы.
19. Legavaz 705 15.10.13 11:35 Сейчас в теме
(14) совершенно верно, восстановится только последний, ведь имя ключа сохранения одно и тоже.
а тебе нужно разный, понятно, подумаю. )
11. Legavaz 705 15.10.13 10:14 Сейчас в теме
по поводу того, что не сохраняются значения таблицы значений.
На самом деле все сохраняется, но дело в том что она у тебя динамическая и у нее вообще нет колонок, поэтому значения которые обработка восстанавливает просто некуда положить/вставить.

вот и вся проблемма.
16. thenroach 4 15.10.13 10:52 Сейчас в теме
согласен что вариант не красивый, но в данном случае все варианты не очень красивые..
Возможно расскажете для чего обработка/отчет предназанчены и мы предложим другой вариант.
17. zaxarovsky 111 15.10.13 11:01 Сейчас в теме
(16) thenroach,
Обработка для ввода и хранения квадратных матриц различного порядка. Вряд ли это чем-то поможет.
amaksimov; +1 Ответить
18. amaksimov 15.10.13 11:17 Сейчас в теме
может быть, поможет ЗначениеВСтрокуВнутр и пожать ещё (со сжатием)
и куда-нибудь его потом и обратно
zaxarovsky; +1 Ответить
22. zaxarovsky 111 15.10.13 12:12 Сейчас в теме
(18) crabzzy,
этого зверя еще пробовал))) надо посмотреть
24. amaksimov 15.10.13 12:21 Сейчас в теме
(22) zaxarovsky, да, пользуются ей успешно, целые таблицы значений кладут в xml так (по сути куда угодно)
26. zaxarovsky 111 15.10.13 12:47 Сейчас в теме
(24) crabzzy,
это я знаю, спасибо :)
нужно тут опробовать енто дело
27. Legavaz 705 15.10.13 13:12 Сейчас в теме
ХранилищеНастроекДанныхФорм (FormDataSettingsStorage)
справка 1с.
28. zaxarovsky 111 15.10.13 13:25 Сейчас в теме
(27) Legavaz,
Это всё проверено. В этих хранилищах не хранятся такие настройки.
29. Bukaska 140 15.10.13 13:26 Сейчас в теме
(28) zaxarovsky, Я так поняла что сохраняет единицы, но не сохраняет нули
30. thenroach 4 15.10.13 21:45 Сейчас в теме
блин, сделай документом. И весь вопрос решен. Из условий подходит.
Тогда и голову мучить не нужно. Почему именно обработка?
31. zaxarovsky 111 16.10.13 07:39 Сейчас в теме
(30) thenroach,
вопрос уже решен оптимально для данной ситуации, через сохранение строкового представления ТаблицыЗначений посредством функции ЗначениеИзСтрокиВнутр.
обработка - потому что должно работать в любой конфе.
32. zaxarovsky 111 16.10.13 10:14 Сейчас в теме
Тема закрыта! :)
thenroach был близок к ответу, Legavaz тоже спасибо, но crabzzy дал лучшее решение!

Для тех кому интересно, делаем так:
1. размещаем на форме невидимое ПолеВвода со строковым реквизитом
2. назначаем ему автосохранение в настройках (вместо ТабличногоПоля)
3. используем следующий код:
Процедура ПередСохранениемЗначений(Отказ)
   СтроковоеПредставлениеТаблицыДляХраненияНастроек = ЗначениеВСтрокуВнутр(ТабМатрица);
КонецПроцедуры

Процедура ПослеВосстановленияЗначений()
    ИнициализацияНажатие(ЭлементыФормы.Инициализация);
    ТабМатрица = ЗначениеИзСтрокиВнутр(СтроковоеПредставлениеТаблицыДляХраненияНастроек);
    ЭлементыФормы.ТабМатрица.СоздатьКолонки();
КонецПроцедуры
Показать


Спасибо!
bds22; amaksimov; +2 Ответить
33. amaksimov 16.10.13 10:20 Сейчас в теме
34. thenroach 4 16.10.13 14:53 Сейчас в теме
(32) zaxarovsky, дак я сразу это решение и предложил :) ты сказал криво...)
amaksimov; +1 Ответить
35. amaksimov 16.10.13 15:06 Сейчас в теме
(34) thenroach, поделился половиной вознаграждения
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот