Имя: Пароль:
1C
 
Зацикливание уровней
0 Tavern
 
14.08.06
14:39
В нижеприведенном коде  на  строке ДоговорЗП.Записать(); выдается ошибка Зацикливание уровней, хотя реально зацикливания нету, и вручную такой перенос можно сделать.
   
Сотр=Справочники.Контрагенты.Выбрать(Справочники.Контрагенты.НайтиПоНаименованию("Сотрудники"));    
   Пока Сотр.Следующий() Цикл
       //ДоговорЗП=Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("ЗП").ПолучитьОбъект();
       Запрос= Новый Запрос;
       Запрос.УстановитьПараметр("Сотр",Сотр.Ссылка);
       Запрос.Текст="
       |ВЫБРАТЬ
       |    ДоговорыКонтрагентов.Ссылка,
       |    ДоговорыКонтрагентов.Представление
       |ИЗ
       |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       |ГДЕ
       |    ДоговорыКонтрагентов.Владелец = &Сотр
       |    И ДоговорыКонтрагентов.ЭтоГруппа = Истина
       |    И ДоговорыКонтрагентов.Наименование = ""ЗП""
       |";
       Рез=Запрос.Выполнить().Выгрузить();
       
       Запрос2= Новый Запрос;
       Запрос2.УстановитьПараметр("Сотр",Сотр.Ссылка);
       Запрос2.УстановитьПараметр("Родитель",Справочники.ДоговорыКонтрагентов.ПустаяСсылка());
       Запрос2.Текст="
       |ВЫБРАТЬ
       |    ДоговорыКонтрагентов.Ссылка,
       |    ДоговорыКонтрагентов.Представление
       |ИЗ
       |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
       |ГДЕ
       |    ДоговорыКонтрагентов.Владелец = &Сотр
       |    И ДоговорыКонтрагентов.ЭтоГруппа = Истина
       |    И ДоговорыКонтрагентов.Наименование = ""ЗП""
       |   И ДоговорыКонтрагентов.Родитель = &Родитель
       |";
       Рез1=Запрос2.Выполнить().Выгрузить();
       
       Если Рез.Количество()>0 Тогда
            ГруппаЗП=Рез[0];//.Ссылка.ПолучитьОбъект();
       Иначе      
           ГруппаЗП=Справочники.ДоговорыКонтрагентов.СоздатьГруппу();
           ГруппаЗП.Владелец= Сотр.Ссылка;
           ГруппаЗП.Наименование="ЗП";
           ГруппаЗП.Записать();
           Сообщить ("ПО сотруднику  " +Сотр+ " создана группа");
       КонецЕсли;    
       Если Рез1.Количество()>0 Тогда
           ДоговорЗП=Рез1[0].Ссылка.ПолучитьОбъект();
           ДоговорЗП.Родитель= ГруппаЗП.Ссылка;
           ДоговорЗП.Записать();
           Сообщить("перенесли договор по сотруднику  "+ Сотр);
       Иначе    
            Сообщить (Сотр+ "  без договора ЗП",СтатусСообщения.Важное);
       КонецЕсли;    
       Прервать;
   КонецЦикла
1 zenik
 
14.08.06
14:43
По ходу это нифига не v7 :(
2 ASV
 
14.08.06
14:47
установи проверку
3 ASV
 
14.08.06
14:57
у тебя группа ЗП на первом уровне попадает в оба запроса и пытается записать сама в себя
4 Tavern
 
14.08.06
15:41
Точно, большое спасибо, видимо ещё от отпуска не отошел)
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.