Есть два тч, одна объект. другая создается на форме, при записи я сворачиваю из тч формы данные в тч объекта.

```1c
    Пример 1 2 3 4
```

я сворачиваю в

```1c
    Пример 1
    Пример 2
    Пример 3
    Пример 4
```

Теперь при открытии надо обратно это сделать? Пытаюсь сделать, но получается что для 1 строки в тч объекте, создается 2 строки в тч формы?

Сворачиваю

```1c
    Для Каждого Стр ИЗ ИнформацияФормы Цикл
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    НоваяСтрока = ТекущийОбъект.Информация.Добавить();
    НоваяСтрока.Период = ТекущийМесяц;
    НоваяСтрока.Реализация = Стр["Реализация"+ а];
    НоваяСтрока.ЗаменаБрака = Стр["ЗаменаБрака"+ а];
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;
    КонецЦикла;
```

Разворачиваю

```1c
    Для Каждого Стр ИЗ Объект.Информация Цикл
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    Сообщить(ТекущийМесяц);
    НоваяСтрока = ИнформацияФормы.Добавить();
    НоваяСтрока["Реализация" + а] = Стр.Реализация;
    НоваяСтрока["ЗаменаБрака" + а] = Стр.ЗаменаБрака;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;
    КонецЦикла;
```
---
в цикле "сворачивания" создаются строки пока ТекущийМесяц < Период.ДатаОкончания
и в цикле разворачивания тоже самое - создаются строки по тому же условию

но цель "разворачивания" иная, нужно же строки таблицы развернуть в одну, а значит добавление строки нужно вынести за пределы условия цикла
как-то так

```1c
    НоваяСтрока = ИнформацияФормы.Добавить();
    Для Каждого Стр ИЗ Объект.Информация Цикл
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    Сообщить(ТекущийМесяц);
    НоваяСтрока["Реализация" + а] = Стр.Реализация;
    НоваяСтрока["ЗаменаБрака" + а] = Стр.ЗаменаБрака;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;
    КонецЦикла;
```
---
сворачивать и разворачивать с дополнительным параметром (колонкой)
например, НомерСтрокиСвернутьРазвернуть = <число от 1 до Х>

при сворачивании получится несколько строк с одинаковым значением НомерСтрокиСвернутьРазвернуть
при разворачивании все строки с одинаковым НомерСтрокиСвернутьРазвернуть помещать в одну строку разворачиваемой таблицы

условие назначения одного НомерСтрокиСвернутьРазвернуть уже сами продумайте, но скорее всего получится как-то так

- свернуть

```1c
    НомерСтрокиСвернутьРазвернуть = 1;
    Для Каждого Стр ИЗ ИнформацияФормы Цикл
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    НоваяСтрока = ТекущийОбъект.Информация.Добавить();
    НоваяСтрока.Период = ТекущийМесяц;
    НоваяСтрока.Реализация = Стр["Реализация"+ а];
    НоваяСтрока.ЗаменаБрака = Стр["ЗаменаБрака"+ а];
    НоваяСтрока.НомерСтрокиСвернутьРазвернуть = НомерСтрокиСвернутьРазвернуть;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;

    НомерСтрокиСвернутьРазвернуть = НомерСтрокиСвернутьРазвернуть + 1;
    КонецЦикла;
```

- развернуть

```1c
    НомерСтрокиСвернутьРазвернуть = 0;
    Для Каждого Стр ИЗ Объект.Информация Цикл
    ЭтоНоваяСтрока = ?(Стр.НомерСтрокиСвернутьРазвернуть <> НомерСтрокиСвернутьРазвернуть, Истина, Ложь);
    Если ЭтоНоваяСтрока Тогда
    НоваяСтрока = ИнформацияФормы.Добавить();
    НомерСтрокиСвернутьРазвернуть = Стр.НомерСтрокиСвернутьРазвернуть;
    КонецЕсли;
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    Сообщить(ТекущийМесяц);
    НоваяСтрока["Реализация" + а] = Стр.Реализация;
    НоваяСтрока["ЗаменаБрака" + а] = Стр.ЗаменаБрака;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;
    КонецЦикла;
```
---
воспользуйтесь советом, нарисуйте на бумажке схему алгоритма, мне визуальное представление очень сильно помогает

если пример кода, то как-то так

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

но цель "разворачивания" иная, нужно же строки таблицы развернуть в одну, а значит добавление строки нужно вынести за пределы условия цикла
как-то так

```1c
    НоваяСтрока = ИнформацияФормы.Добавить();
    Для Каждого Стр ИЗ Объект.Информация Цикл
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    Сообщить(ТекущийМесяц);
    НоваяСтрока["Реализация" + а] = Стр.Реализация;
    НоваяСтрока["ЗаменаБрака" + а] = Стр.ЗаменаБрака;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;
    КонецЦикла;
```
---
Спасибо. работает, но есть проблемка
ПРи разворачивании в тч формы должно быть в два раза меньше строк чем в тч объекта.
Так как
 НоваяСтрока = ИнформацияФормы.Добавить();
Вне цикла, то строка в итоге получается только одна,
Если включить это в цикл, то строк столько же сколько и в тч объекта. Можно было бы свернуть, но заранее не известно сколько колонок в тч формы, поэтому названия колонок разные.
В итоге вопрос, как быть?
---
сворачивать и разворачивать с дополнительным параметром (колонкой)
например, НомерСтрокиСвернутьРазвернуть = <число от 1 до Х>

при сворачивании получится несколько строк с одинаковым значением НомерСтрокиСвернутьРазвернуть
при разворачивании все строки с одинаковым НомерСтрокиСвернутьРазвернуть помещать в одну строку разворачиваемой таблицы

условие назначения одного НомерСтрокиСвернутьРазвернуть уже сами продумайте, но скорее всего получится как-то так

- свернуть

```1c
    НомерСтрокиСвернутьРазвернуть = 1;
    Для Каждого Стр ИЗ ИнформацияФормы Цикл
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    НоваяСтрока = ТекущийОбъект.Информация.Добавить();
    НоваяСтрока.Период = ТекущийМесяц;
    НоваяСтрока.Реализация = Стр["Реализация"+ а];
    НоваяСтрока.ЗаменаБрака = Стр["ЗаменаБрака"+ а];
    НоваяСтрока.НомерСтрокиСвернутьРазвернуть = НомерСтрокиСвернутьРазвернуть;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;

    НомерСтрокиСвернутьРазвернуть = НомерСтрокиСвернутьРазвернуть + 1;
    КонецЦикла;
```

- развернуть

```1c
    НомерСтрокиСвернутьРазвернуть = 0;
    Для Каждого Стр ИЗ Объект.Информация Цикл
    ЭтоНоваяСтрока = ?(Стр.НомерСтрокиСвернутьРазвернуть <> НомерСтрокиСвернутьРазвернуть, Истина, Ложь);
    Если ЭтоНоваяСтрока Тогда
    НоваяСтрока = ИнформацияФормы.Добавить();
    НомерСтрокиСвернутьРазвернуть = Стр.НомерСтрокиСвернутьРазвернуть;
    КонецЕсли;
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    Сообщить(ТекущийМесяц);
    НоваяСтрока["Реализация" + а] = Стр.Реализация;
    НоваяСтрока["ЗаменаБрака" + а] = Стр.ЗаменаБрака;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;
    КонецЦикла;
```
---
Спасибо, тоже работает.
Возникли теперь проблемы с тем что, например.

```1c
    Пример 1 2 3 4
```

При сворачивании

```1c
    Пример 1
    Пример 2
    Пример 3
    Пример 4
```

При разворачивании становится

```1c
    Пример 4 4 4 4
```
---
```1c
    НомерСтрокиСвернутьРазвернуть = 0;
    Для Каждого Стр ИЗ Объект.Информация Цикл
    ЭтоНоваяСтрока = ?(Стр.НомерСтрокиСвернутьРазвернуть <> НомерСтрокиСвернутьРазвернуть, Истина, Ложь);
    Если ЭтоНоваяСтрока Тогда
    НоваяСтрока = ИнформацияФормы.Добавить();
    НомерСтрокиСвернутьРазвернуть = Стр.НомерСтрокиСвернутьРазвернуть;
    КонецЕсли;
    а = 1;
    ТекущийМесяц = Период.ДатаНачала;
    Пока ТекущийМесяц < Период.ДатаОкончания Цикл
    Сообщить(ТекущийМесяц);
    НоваяСтрока["Реализация" + а] = Стр.Реализация; //Это потому что для каждой колонки реализация задается значение Стр.реализация.
    НоваяСтрока["ЗаменаБрака" + а] = Стр.ЗаменаБрака;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    а=а+1;
    КонецЦикла;
    КонецЦикла;
```

А надо чтоб для первой колонки НоваяСтрока["Реализация" + а] было = Стр.Реализация из первой строки тч объекта
Далее а становится +1 и уже для НоваяСтрока["Реализация" + а] было = Стр.Реализация из второй строки тч объекта
---
потому что используется конструкция цикл в цикле

например, при данной постановке условия
надо чтоб для первой колонки НоваяСтрока["Реализация" + а] было = Стр.Реализация из первой строки тч объекта
Далее а становится +1 и уже для НоваяСтрока["Реализация" + а] было = Стр.Реализация из второй строки тч объекта
явный конфликт вложенного цикла "Пока ТекущийМесяц < Период.ДатаОкончания Цикл" внутри которого меняется а, но не происходит смены Стр

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

рекомендую нарисовать на бумаге полную схему алгоритма
что было до сворачивания - что стало в результате сворачивания - что нужно получить после разворачивания
расчертить связи между данным на всех этапах и сразу станет ясно, каким образом правильно свернуть\развернуть
---
Да. я попытался убрать ицкл и так посмотреть. но все так же, не понимаю как менять стр?
Я добавил УИ дял строк(НомерСтрокиСвернутьРазвернуть).
Теперь надо взять все такие строки допустим с номером 1, и для одной строки тч формы, прогоянять по всем этим строкам, и для каждой колонки тч формы, присваивать значения из каждой строки стр. Не могу понтяь как это сделать, пример тоже не мог унайти

UPD, все получилось, убрал вложенный цикл, при этом надо было переменной а задавать = 1 в другом месте.
Спасибо большое за помощь!(7)
---
воспользуйтесь советом, нарисуйте на бумажке схему алгоритма, мне визуальное представление очень сильно помогает

если пример кода, то как-то так

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

```1c
    \ УИ = 0;
    Для Каждого Стр ИЗ Объект.Информация Цикл
    ЭтоНоваяСтрока = ?(Стр.УИ <> УИ, Истина, Ложь);
    Если ЭтоНоваяСтрока Тогда
    НоваяСтрока = ИнформацияФормы.Добавить();
    УИ = Стр.УИ;
    а = 1;
    КонецЕсли;
    НоваяСтрока["Реализация" + а] = Стр.Реализация;
    НоваяСтрока["ЗаменаБрака" + а] = Стр.ЗаменаБрака;
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр, "КодSL, Признак, СреднемесячнаяОтгрузка");
    а=а+1;
    КонецЦикла;
```