Имя: Пароль:
1C
 
Как перенести программно элемент справочника в другую группу?
0 Platon
 
10.10.04
08:01
Подскажите как можно перенести элемент в другую группу программно
// сз список значений
   стр = "";
   Для Номер = 1 По сз.РазмерСписка() Цикл
       код = сз.ПолучитьЗначение(Номер, стр); //получить значение и представление
       
       Если (спр.НайтиПоРеквизиту("НомерР3",СокрЛП(код),1)=1)  Тогда
           Работающие = СпрСотр.ТекущийЭлемент();
           
           спр.ИспользоватьРодителя(Работающие);
   
       КонецЕсли;
       
       Состояние("Перенесён элемент "+спр.Код+" Всего "+i);
   КонецЦикла;
1 mszsuz
 
10.10.04
08:30
Если (спр.НайтиПоРеквизиту("НомерР3",СокрЛП(код),1)=1)  Тогда
Спр.Родитель = СпрСотр.ТекущийЭлемент();
Спр.Записать();
КонецЕсли;
2 Platon
 
10.10.04
08:57
Так когда делаю выдаёт ошибку:
спр.Parent = спр.ТекущийЭлемент();
неверное значение
**********    
спр=СоздатьОбъект("Справочник.Материалы");
           НачатьТранзакцию();

спр.НайтиПоКоду("520000");
  Род=спр.ТекущийЭлемент();
  стр = "";
   Для Номер = 1 По сз.РазмерСписка() Цикл
       код = сз.ПолучитьЗначение(Номер, стр); //получить значение и представление
       
       Если (спр.НайтиПоРеквизиту("НомерР3",код,1)=1)  Тогда
      спр.Parent = спр.ТекущийЭлемент();
      спр.Write();
         Состояние("Перенесён элемент "+спр.Код+" Всего "+i);
       КонецЕсли;
       
       
   КонецЦикла;
   ЗафиксироватьТранзакцию();
3 Platon
 
10.10.04
09:09
Уже и так пробовал  и всё равно все остаются в своей группе
**********    
спр=СоздатьОбъект("Справочник.Материалы");
           НачатьТранзакцию();

спр.НайтиПоКоду("520000");
  Род=спр.ТекущийЭлемент();
  стр = "";
   Для Номер = 1 По сз.РазмерСписка() Цикл
       код = сз.ПолучитьЗначение(Номер, стр); //получить значение и представление
       
       Если (спр.НайтиПоРеквизиту("НомерР3",код,1)=1)  Тогда

           спр.НайтиЭлемент(спр.ТекущийЭлемент());

      спр.Parent = Род;
      спр.Write();
         Состояние("Перенесён элемент "+спр.Код+" Всего "+Номер);
       КонецЕсли;
       
       
   КонецЦикла;
   ЗафиксироватьТранзакцию();
4 mszsuz
 
10.10.04
09:28
Проверь, находит ли
Если спр.НайтиПоКоду("520000") = 0 тогда
Сообщить("Не найден");
Возврат;
КонецЕсли;
в (2):
спр.Parent = спр.ТекущийЭлемент(); // !!! ты пытаешься самого себя присвоить в качестве родителя;
в (3):
// лишнее спр.НайтиЭлемент(спр.ТекущийЭлемент());
5 Platon
 
10.10.04
09:59
Похоже поехало. Я действительно не правильно искал и после проверки мне выдало что не находит Теперь я в найти по коду установил флаг глобального поиска с учётом ваших замечаний и вроде перенос идёт только медленно я наверно ждать не буду и посмотрю завтра что получилось. Спасибо.:)

   спр=СоздатьОбъект("Справочник.Материалы");
   
   НачатьТранзакцию();
   Если спр.НайтиПоНаименованию("Запчасти ОГМ",0,1) = 0 тогда
       Сообщить("Не найден");
       Возврат;
   Иначе
       Род=спр.ТекущийЭлемент();
   КонецЕсли;
   
   стр = "";
   Для Номер = 1 По сз.РазмерСписка() Цикл
       код = сз.ПолучитьЗначение(Номер, стр); //получить значение и представление
       
       Если (спр.НайтиПоРеквизиту("НомерР3",код,1)=1)  Тогда
           //спр.НайтиЭлемент(спр.ТекущийЭлемент());
           спр.Parent = Род;
           спр.Write();
           Состояние("Перенесён элемент "+спр.Код+" Всего "+Номер);
       КонецЕсли;
       
       
   КонецЦикла;
   ЗафиксироватьТранзакцию();
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший