Имя: Пароль:
1C
1C 7.7
v7: Зацикливание при попытке записи периодического реквизита в 1с под sql
0 Deenka
 
27.02.13
14:05
При проведении документа проверяю историю значения периодического реквизита "Тариф" справочника "Сотрудники" и пытаюсь установить новое значение периодического реквизита "Тариф" если есть значение с датой больше за значение "ДатаПеремещения". Но почему-то у меня получается зацикливание этого куска кода в базе под SQL. В файловой базе все работает нормально. Помогите, пожалуйста, разобратся в чем причина  

Тариф1=СоздатьОбъект("Периодический");  
       Тариф1.ИспользоватьОбъект("Тариф", Сотрудник);
       Тариф1.ВыбратьЗначения();
       Пока Тариф1.ПолучитьЗначение()=1 Цикл
           Если ((Тариф1.ДатаЗнач>ДатаПеремещения)  ) Тогда
               Если Тариф1.ТекущийДокумент().Выбран() = 0 Тогда
                   Тариф1.Удалить();  
               иначе
                   Если (Тариф<>0 )Тогда
                       УстановитьРеквизитСправочника (Сотрудник,"Тариф",Тариф,Тариф1.ДатаЗнач);
                   иначеЕсли ((Тариф=0)  и  (ТарифСТ<>Тариф1.Значение))  тогда    
                       УстановитьРеквизитСправочника (Сотрудник,"Тариф",ТарифСТ,Тариф1.ДатаЗнач);
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
1 viktor_vv
 
27.02.13
14:10
Ты бы запись периодического значения из цикла вынес бы.
2 1Сергей
 
27.02.13
14:10
Пока Тариф1.ПолучитьЗначение()=1 Цикл
           Если ((Тариф1.ДатаЗнач>ДатаПеремещения)  ) Тогда
               Если Тариф1.ТекущийДокумент().Выбран() = 0 Тогда
                   Тариф1.Удалить();  
                   Тариф1.ВыбратьЗначения(); //- вот это добавь
               иначе
                    Если (Тариф<>0 )Тогда
                       УстановитьРеквизитСправочника (Сотрудник,"Тариф",Тариф,Тариф1.ДатаЗнач);
                       Тариф1.ВыбратьЗначения(); //- вот это добавь
                   иначеЕсли ((Тариф=0)  и  (ТарифСТ<>Тариф1.Значение))  тогда    
                       УстановитьРеквизитСправочника (Сотрудник,"Тариф",ТарифСТ,Тариф1.ДатаЗнач);
                       Тариф1.ВыбратьЗначения(); //- вот это добавь
                   КонецЕсли;
3 Deenka
 
27.02.13
15:46
viktor_vv, спасибо
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший