Подскажите как бороться с проблемкой?
При восстановлении настроек в форме стандартным способом не восстанавливается состав колонок (если количество колонок различное у текущей ТаблицыЗначений и у той, которая сохранена в настройке).
Есть идеи?
Я извернулся только через "повторное" восстановление настройки. Но это как-то некрасиво.
"Хранилища настроек" не предлагать.
Обработка прилагается.
---
может быть, поможет ЗначениеВСтрокуВнутр и пожать ещё (со сжатием)
и куда-нибудь его потом и обратно
---
ИМХО. Сохраненные настройки - зло.
Причина.
Структура настроек отчета, списка, обработки, и т.д. могут изменяться в процессе эволюции. Автоматически можно попробовать сразу после обновления провести необходимую модификацию настроек. Но есть одно "НО".
Не всегда (а точнее в большем количестве случаев), можно однозначно определить что ожидает пользователь от сохраненных настроек, при новой их структуре. Как следствие, решение о восстановлении настроек обычно предоставляется пользователю.
Один из альтернативных вариантов решения данной проблемы - делать жесткие отчеты, обработки, и т.д., т.е. что б пользователь всегда видел только то, что ему нужно. Но здесь возникает другая проблема. Стоимость поддержки всего этого зоопарка.
Поэтому приходится искать компромисс между квалифицированными пользователями, способными восстановить настройки самостоятельно, и затратами на поддержания работоспособности различных жестких вариантов отчетов (обработок, списков и т.д.)
---
Lama12-1,
Вау! Не ожидал такого :).
---
если конфигурация типовая, можно прикрутить механизм типового хранилища, РС (Сохраненные настройки).
Типовая?
(13) согласен полностью.
если не типовая то лучше заменить на хранение через внешний файл. там вообщем то немного нужно будет добавить.
по поводу ошибок,
 много лишнего кода,
 переназначение переменных, и последующий анализ и их сравнение.

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

Видно, что пишешь не давно, на мат часть. не обижайся)!
---
Legavaz,
к конфе не привязываюсь, обработка должна работать везде

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

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

кстати, никто не в курсе где хранятся эти стандартные настройки, в каком хранилище? и можно ли к ним доступ как-то получить? типа, коллекция настроек...
---
вот

```1c
    Выборка = ХранилищеСистемныхНастроек.Выбрать();
    Пока Выборка.Следующий() Цикл
    //тут их можно обработать
    КонецЦикла;
```
---
Legavaz,
нет, это не те настройки. нет тут тех, которые по кнопочкам Сохр/Восст.
---
Никто не хочет ответить?
---
не понятно, что значит извернулся только через "повторное" восстановление

для того, чтобы появились "потерянные колонки", стоит попробовать "СоздатьКолонки()" после восстановления значения таблицы
---
tango,
"повторное" восстановление... это значит второй раз нажать кнопочку "Восстановить" (и после того как я программно добавляю нужное/потерянное число колонок к текущей таблице).

для того, чтобы появились "потерянные колонки", стоит попробовать "СоздатьКолонки()" после восстановления значения таблицы - тут как раз и не получается. Пробовал, не создаются, так как при восстановлении они "теряются", если их было больше, чем в текущей таблице.
---
может в структуру запихнуть состав колонок с помещением в хранилище
---
forev8,
ну, вот я хотел сначала без хранилища как-то попробовать решить...
---
много ошибок, описывать долго, просто поправил чтоб работало, а там сам смотри, сравнивай что не так.
---
Legavaz,
хм,
1. не понял - каких ошибок?
2. что вы мне прислали?

мне нужно, чтобы восстанавливалась не пустая таблица, а со всеми сохраненными значениями в ячейках.
---
можно попробовать сохранять в некий невидимый строковый реквизит таблицу значений.
Этот строковый реквизит как раз сохранять при закрытии формы.
А при открытии из него восстанавливать :)
---
thenroach,
этот вариант тоже некрасивый с моей точки зрения
лучше уж невидимое табличноеполе с максимальным количеством колонок создать и восстанавливать из него
---
не восстанавливается состав колонок, понял не как содержимое.
подправил обработку теперь все что нужно восстанавливает. но следует понимать что данное решение не подходит для управляемых форм

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

```1c
    Процедура ПередСохранениемЗначений(Отказ)

    СтруктураСохранения = Новый Структура("Порядок,ТабЗнач",Порядок,Таб);

    СохранитьЗначение("УчиМатЧасть)",СтруктураСохранения);

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

    Процедура ПослеВосстановленияЗначений()

    Структура = ВосстановитьЗначение("УчиМатЧасть)");

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

    КонецПроцедуры
```
---
Legavaz,
матчасть знаю, в принципе
В этой настройке "УчиМатЧасть)" будет сохраняться только последние данные таблицы.
Попробуйте подряд восстановить из нескольких ранее сохраненных Настроек - увидите эффект. Воостановится только ваш последний вариант таблицы.
---
совершенно верно, восстановится только последний, ведь имя ключа сохранения одно и тоже.
а тебе нужно разный, понятно, подумаю. )
---
по поводу того, что не сохраняются значения таблицы значений.
На самом деле все сохраняется, но дело в том что она у тебя динамическая и у нее вообще нет колонок, поэтому значения которые обработка восстанавливает просто некуда положить/вставить.

вот и вся проблемма.
---
согласен что вариант не красивый, но в данном случае все варианты не очень красивые..
Возможно расскажете для чего обработка/отчет предназанчены и мы предложим другой вариант.
---
thenroach,
Обработка для ввода и хранения квадратных матриц различного порядка. Вряд ли это чем-то поможет.
---
может быть, поможет ЗначениеВСтрокуВнутр и пожать ещё (со сжатием)
и куда-нибудь его потом и обратно
---
crabzzy,
этого зверя еще пробовал))) надо посмотреть
---
zaxarovsky, да, пользуются ей успешно, целые таблицы значений кладут в xml так (по сути куда угодно)
---
crabzzy,
это я знаю, спасибо :)
нужно тут опробовать енто дело
---
ХранилищеНастроекДанныхФорм (FormDataSettingsStorage)
справка 1с.
---
Legavaz,
Это всё проверено. В этих хранилищах не хранятся такие настройки.
---
zaxarovsky, Я так поняла что сохраняет единицы, но не сохраняет нули
---
блин, сделай документом. И весь вопрос решен. Из условий подходит.
Тогда и голову мучить не нужно. Почему именно обработка?
---
thenroach,
вопрос уже решен оптимально для данной ситуации, через сохранение строкового представления ТаблицыЗначений посредством функции ЗначениеИзСтрокиВнутр.
обработка - потому что должно работать в любой конфе.
---
Тема закрыта! :)
thenroach был близок к ответу, Legavaz тоже спасибо, но crabzzy дал лучшее решение!

Для тех кому интересно, делаем так:
1. размещаем на форме невидимое ПолеВвода со строковым реквизитом
2. назначаем ему автосохранение в настройках (вместо ТабличногоПоля)
3. используем следующий код:

```1c
    Процедура ПередСохранениемЗначений(Отказ)
    СтроковоеПредставлениеТаблицыДляХраненияНастроек = ЗначениеВСтрокуВнутр(ТабМатрица);
    КонецПроцедуры

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

Спасибо!
---
zaxarovsky, спасибо!
---
zaxarovsky, дак я сразу это решение и предложил :) ты сказал криво...)
---
thenroach, поделился половиной вознаграждения