Как развернуть тч по вертикали?

1. arsen_botashev 23.04.19 09:24 Сейчас в теме
Есть два тч, одна объект. другая создается на форме, при записи я сворачиваю из тч формы данные в тч объекта.
Пример        1 2 3 4 

я сворачиваю в
Пример 1
Пример 2
Пример 3
Пример 4


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


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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

При сворачивании
Пример 1
Пример 2
Пример 3
Пример 4

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


А надо чтоб для первой колонки НоваяСтрока["Реализация" + а] было = Стр.Реализация из первой строки тч объекта
Далее а становится +1 и уже для НоваяСтрока["Реализация" + а] было = Стр.Реализация из второй строки тч объекта
7. VictorRGB2 13 23.04.19 11:32 Сейчас в теме
(6) потому что используется конструкция цикл в цикле

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

явный конфликт вложенного цикла "Пока ТекущийМесяц < Период.ДатаОкончания Цикл" внутри которого меняется а, но не происходит смены Стр

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

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

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

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

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