Имя: Пароль:
1C
1С v8
Проблема в цикле
0 Nenaviwu1c20
 
15.08.12
14:27
Здраствуйте!Возникла проблема !!!Всю жизнь использовал детский кодик "Для  каждого из"
Проблема возникла в документе Зарплата к выплате.Хочу проверить ТЗ на уволенных используя стандартный код для каждого из.При этом он опускает строку с конкретным ФизЛицом какой бы у нее индекс не был.При этом по итератору найти могу без проблем.Проблема в том что КАК!!!)))это же не логично чтоб пропускать конкретную строку.Могу даже кодик проверки предоставить.
1 Nenaviwu1c20
 
15.08.12
14:28
Ап
2 rbcvg
 
15.08.12
14:28
"Могу даже кодик проверки предоставить" - будьте любезны.
3 Fragster
 
гуру
15.08.12
14:29
строки удаляешь небось в том же цикле? два подряд уволенных?
4 Fragster
 
гуру
15.08.12
14:29
(2) это лишнее
5 Nenaviwu1c20
 
15.08.12
14:30
Процедура ПроверитьНаУвольнениеСотрудника(Таблица)
             Индекс = 0;
            для каждого стр из Таблица цикл
           

   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ПериодыРаботыРаботниковОрганизацийПоОсновномуМестуРаботы.ДатаОкончания КАК ДатаКонецРаботнику
       |ИЗ
       |    РегистрСведений.ПериодыРаботыРаботниковОрганизацийПоОсновномуМестуРаботы КАК ПериодыРаботыРаботниковОрганизацийПоОсновномуМестуРаботы
       |ГДЕ
       |    ТИПЗНАЧЕНИЯ(ПериодыРаботыРаботниковОрганизацийПоОсновномуМестуРаботы.Регистратор) = ТИПЗНАЧЕНИЯ(ЗНАЧЕНИЕ(Документ.УвольнениеИзОрганизаций.ПустаяСсылка))
       |    И ПериодыРаботыРаботниковОрганизацийПоОсновномуМестуРаботы.Физлицо = &ФизЛицо";
     запрос.УстановитьПараметр("ФизЛицо",стр.Физлицо);
   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Если  ВыборкаДетальныеЗаписи.Следующий() Тогда
       Если ВыборкаДетальныеЗаписи.ДатаКонецРаботнику<= НачалоМесяца(ПериодРегистрации)  Тогда
           таблица.Удалить(Индекс) ;
       ИначеЕсли ВыборкаДетальныеЗаписи.ДатаКонецРаботнику> НачалоМесяца(ПериодРегистрации) и ВыборкаДетальныеЗаписи.ДатаКонецРаботнику<= КонецМесяца(ПериодРегистрации) Тогда
           Сообщить("Работник "+ стр.Физлицо + " уволен в этом месяце.Требуется пересчет его аванса вручную");
           стр.Сумма = 0;
           стр.Начислено = 0;
       КонецЕсли;
   КонецЕсли;
   
       
           индекс = Индекс + 1;
               
       КонецЦикла;
   //КонецЦикла;
   
           
КонецПроцедуры
6 Nenaviwu1c20
 
15.08.12
14:31
Клиент так заказал
7 Fragster
 
гуру
15.08.12
14:31
автору предлагаю воспользоваться выгрузкой в ТЗ, левым соединением в запросе с отбором, загрузкой результата в ТЧ без циклов вообще, да и по скорости быстрее сильно
8 Nenaviwu1c20
 
15.08.12
14:31
и удалить я мог просто по стр но выбрал изврщенческий способ (извените))))
9 Fragster
 
гуру
15.08.12
14:31
(6) заказал удалять строки в цикле?
10 Nenaviwu1c20
 
15.08.12
14:32
да согласен на сто процентов с вами просто он вообще не находит стр с определенной ссылкой.Это меня больше беспокоит
11 forforumandspam
 
15.08.12
14:32
Здраствуйте! Возникла проблемка !!! Всю жизнь использовал детский кодик "Для  каждого из"
Проблемка возникла в документике "Зарплатка к выплате". Хочу проверить ТЗ на уволенных используя стандартненький кодик "для каждого и"....
12 Nenaviwu1c20
 
15.08.12
14:34
(11)?
13 Nenaviwu1c20
 
15.08.12
14:35
Думаю (7) самый оптимальный вариант
14 Nenaviwu1c20
 
15.08.12
14:35
Просто я так и не понял как можно когда строк 6 выводить 5!?
15 SanGvin
 
15.08.12
14:38
(5) Вы удаляете в цикле. В этом то и проблема. Так делать низзя!
16 Fragster
 
гуру
15.08.12
14:55
(15) можно, просто следует понимать, что надо делать так, если очень хочется юзать Для каждого:

Для каждого Стр Из ТЗ Цикл
 Пока Удалять Цикл
   ТЗ.Удалить(Стр)
 КонецЦикла;
КонецЦикла;
17 Fragster
 
гуру
15.08.12
14:55
Ну и проверку на выход за границу ТЗ
18 Fragster
 
гуру
15.08.12
15:00
кстати, я фигню написал
19 IBTM
 
15.08.12
15:33
(0) в этом документе есть типовая кнопа "удальть пустые", присмотрись к ней внимательней...