Как прервать цикл?

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

Проблема в том что, после добавление нескольких строк, для одной строки, цикл продолжает добавлять строки для другой, только что созданной в этом цикле строки.
То есть если есть одна строка в тч, цикл должен проходить 1 раз, и добавить допустим 3 строки. цикл проходит один раз, добавляет 3 строки, и продолжает для этих вновь добавленных строк опять добавлять еще строки.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
21. spacecraft 22.04.19 15:38 Сейчас в теме
(1) можно просто выгрузить ТЧ в ТЗ и обходить полученную ТЗ и добавлять строки в ТЧ. Все просто.
ant1773; cherptat; alex-l19041; +3 Ответить
36. ant1773 5 24.04.19 12:46 Сейчас в теме
(21) Быстро, просто, красиво. Гениально :)
37. dimon_tb 24.04.19 23:18 Сейчас в теме
(21) самый простой способ и результативный. на мой взгляд
23. VladimirB 16 22.04.19 15:53 Сейчас в теме
Ты же писал в (1) что строки добавляются для всех строк, и для вновь созданных. Здесь в (19) ставим условие, чтобы новые пропускались.
24. arsen_botashev 22.04.19 16:05 Сейчас в теме
(23)Да, строки пропускаются. все нормально, но!!!! Строки для старых строк не доавляются?
Смотрите есть две строки в тч
Для этих 2 строк надо добавить еще 2 строки допустим. Добавляю в цикле две строки. задаю им пр = 1, они пропускаются. Но строки не добавляются вообще, то есть было 2 строки, цикл прошелся, лолжно было быть 4 строки, а строк 2. Но цикл работает, в цикл заходит..
25. sergathome 4 22.04.19 16:13 Сейчас в теме
(24) может кто-то не там добавленные строки ищет ? Я уж намекал-намекал... Скорее всего проблема в Объект и Форма. Строки вы добавляете в Объект, а ищете их потом на форме. Они сами туда не попадут, ага... Контекст проверьте, вобщем. Чудес не бывает.
28. arsen_botashev 22.04.19 16:26 Сейчас в теме
(25)Почему-то я пишу
а =1 потом цикл, все норм,
а если пишу цикл потом а =1 тогда строк нет, чудеса
30. пользователь 22.04.19 16:32
Сообщение было скрыто модератором.
...
31. пользователь 22.04.19 16:35
Сообщение было скрыто модератором.
...
33. пользователь 22.04.19 16:45
Сообщение было скрыто модератором.
...
34. arsen_botashev 22.04.19 16:48 Сейчас в теме
(33)Короче проблема была в том что, может это и имелось ввиду,
(25)
Скорее всего проблема в Объект и Форма.

Надо ыбло записывать данные не в объект.информация, а текущий объект.информация



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

у тебя постоянно увеличивается "а"
во втором случае у тебя для каждой строки "а" начинает увеличиваться с 1

Теперь вопрос:
Сколько у тебя полей вида Реализация[i], ЗаменаБрака[i], получается в первом случае чем больше у тебя строк, тем больше "а".
26. VladimirB 16 22.04.19 16:14 Сейчас в теме
(24) Обнули "Пр" перед выполнением цикла.
Вообще интересно ты как-то организуешь добавление строк. Для некой строки в этой же ТЧ добавляешь еще строки. А если два раза цикл прокрутить (при вызове функции или процедуры) или больше. Они же постоянно тогда добавляться будут.
А не лучше было бы создать подчиненную ТЧ?
27. VladimirB 16 22.04.19 16:20 Сейчас в теме
(26) И, действительно, проверь что говорят в (25) , что за объект.Информация у тебя?
Это реквизит формы?
29. arsen_botashev 22.04.19 16:31 Сейчас в теме
(26)Да, спасибо, я так уже и сделал.
2. singlych 22.04.19 14:41 Сейчас в теме
Для Индекс = 0 По Объект.Информация.Количество() - 1 Цикл
Стр = Объект.Информация[Индекс];
............
4. sergathome 4 22.04.19 14:43 Сейчас в теме
(2) как вы думаете, что покажет Объект.Информация.Количество() после добавления строки в Объект.Информация ?
5. singlych 22.04.19 14:45 Сейчас в теме
(4) Я думаю, оно вычисляется один раз при начале цикла.
starik-2005; +1 Ответить
3. sergathome 4 22.04.19 14:41 Сейчас в теме
При таком подходе нельзя использовать цикл Для Каждого. Используйте цикл с индексом. Только правильно, а не как в (2).
6. arsen_botashev 22.04.19 14:45 Сейчас в теме
7. singlych 22.04.19 14:46 Сейчас в теме
(6) ну если прав (4), то вычисли количество строк до начала цикла.
8. arsen_botashev 22.04.19 14:51 Сейчас в теме
(7)Вычислил количество строк, их 4 допустим. Как идентифицировать эти строки чтоб именно для них создавались новые?
9. sergathome 4 22.04.19 14:51 Сейчас в теме
(6)
 Кл = Объект.Информация.Количество() - 1;
    Для а=1  по Кл Цикл    
        Стр = Объект.Информация[а-1];
        ТекущийМесяц = Период.ДатаНачала;
        Пока ТекущийМесяц < Период.ДатаОкончания Цикл
            Сообщить(ТекущийМесяц);
            НоваяСтрока             = Объект.Информация.Добавить();
            НоваяСтрока.Период         = ТекущийМесяц;
            НоваяСтрока.Реализация     = Стр["Реализация"+ а];
            НоваяСтрока.ЗаменаБрака = Стр["ЗаменаБрака"+ а];
            ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр,"КодSL,Признак");
            ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
        КонецЦикла;
    КонецЦикла;

Показать
10. arsen_botashev 22.04.19 14:57 Сейчас в теме
(9)Попробовал так, теперь вообще ничего не происходит.
11. sergathome 4 22.04.19 15:00 Сейчас в теме
(10) вот прям вот точно вот так и ничего не происходит ? ... фантастика.. хоть что-то же должно происходить....
12. arsen_botashev 22.04.19 15:01 Сейчас в теме
(11)Вообще ничего)) ТЧ очищается
13. sergathome 4 22.04.19 15:04 Сейчас в теме
(12) А если так ?
Кл = Объект.Информация.Количество() - 1;
 а=1;
   Для Инд = 0   по Кл Цикл    
        Стр = Объект.Информация[Инд];
        ТекущийМесяц = Период.ДатаНачала;
        Пока ТекущийМесяц < Период.ДатаОкончания Цикл
            Сообщить(ТекущийМесяц);
            НоваяСтрока             = Объект.Информация.Добавить();
            НоваяСтрока.Период         = ТекущийМесяц;
            НоваяСтрока.Реализация     = Стр["Реализация"+ а];
            НоваяСтрока.ЗаменаБрака = Стр["ЗаменаБрака"+ а];
            ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр,"КодSL,Признак");
            ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
а = а + 1;
        КонецЦикла;
    КонецЦикла;
Показать
14. arsen_botashev 22.04.19 15:07 Сейчас в теме
(13)
Кл = Объект.Информация.Количество() - 1;
а=1;
Для Инд = 0 по Кл Цикл
Стр = Объект.Информация[Инд];
ТекущийМесяц = Период.ДатаНачала;
Пока ТекущийМесяц < Период.ДатаОкончания Цикл
Сообщить(ТекущийМесяц);
НоваяСтрока = Объект.Информация.Добавить();
НоваяСтрока.Период = ТекущийМесяц;
НоваяСтрока.Реализация = Стр["Реализация"+ а];
НоваяСтрока.ЗаменаБрака = Стр["ЗаменаБрака"+ а];
ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр,"КодSL,Признак");
ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
а = а + 1;
КонецЦикла;
КонецЦикла;
Показать


тоже самое, цикл проходится, ошибок нет, но строки не появляются
15. singlych 22.04.19 15:09 Сейчас в теме
(14) уверен, что
ТекущийМесяц < Период.ДатаОкончания
?
18. arsen_botashev 22.04.19 15:10 Сейчас в теме
(15) Да, текущий месяц это Период.ДатаНачала.
17. sergathome 4 22.04.19 15:10 Сейчас в теме
(14) ну, значит не судьба. посмотреть бы ещё напоследок ГДЕ "строки не появляются", так, чисто ради спортивного интереса...
16. arsen_botashev 22.04.19 15:10 Сейчас в теме
(13)Хотя нет, добавил 2 строки, теперь хоть что-то показывает, в первом случае даже этого не было. Когда 2 строки добавлял.
20. sergathome 4 22.04.19 15:12 Сейчас в теме
(16) потрясающая фраза. ради такого мы все сюда и ходим. занёс в тетрадку.
19. VladimirB 16 22.04.19 15:12 Сейчас в теме
Добавь в Объект.Информация дополнительное поле например "Пр" и переделай так:

    а=1;
    Для каждого Стр из Объект.Информация Цикл
           Если Стр.Пр=1 Тогда
                       Продолжить;
           КонецЕсли;
        ТекущийМесяц = Период.ДатаНачала;
        Пока ТекущийМесяц < Период.ДатаОкончания Цикл
            Сообщить(ТекущийМесяц);
            НоваяСтрока             = Объект.Информация.Добавить();
            НоваяСтрока.Период         = ТекущийМесяц;
            НоваяСтрока.Реализация     = Стр["Реализация"+ а];
            НоваяСтрока.ЗаменаБрака = Стр["ЗаменаБрака"+ а];
            НоваяСтрока.Пр=1;
            ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр,"КодSL,Признак");
            ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
            а=а+1;
        КонецЦикла;
    КонецЦикла;
Показать
22. arsen_botashev 22.04.19 15:38 Сейчас в теме
(19)Не получается, в тч должны добавлять строки, цикл выполняется 3 раза, но строки не доавбляются, не могу понять в чем проблема
35. пользователь 23.04.19 08:12
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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