Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Форум 1С: Одинэс.Ру

Найти!

Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
12.02.2009 - 09:59
Собственно есть справочник в нем n-ое число элементов и две папки "Четные" и "Нечетные" и соответственно нужно элементы с четными кодами поместить в папку "Четные", а не четные в "Нечетные". Проблема в том, что после присвоения первому элементу родителя, Цикл - Пока Спр.ПолучитьЭлемент()=1 Цикл ..... КонцеЦикла - прекращается. Т.е. дальнейший перебор элементов уже происходить в папке-родителя ?
К списку тем 1 > К списку форумов

Интересные темы

odines.ru
20.01.2021 - 18:29
Смотри также:
Затирание информации в базе. Причины ?
Отредактировать файл xml
Какая связь между 1С и операционной системой?

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
1 - 12.02.2009 - 10:15
Главное здесь не Спр.ПолучитьЭлемент(), а Спр.ВыбратьЭлементы(), в частности, параметр этого метода

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
2 - 12.02.2009 - 10:24
Спр.ВыбратьЭлементы(1); - поменял на 0 - присвоение родителя вообще не происходит.

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Arden
3 - 12.02.2009 - 11:15
(2) все работает

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
4 - 12.02.2009 - 11:26
Спр.ВыбратьЭлементы(0);
 

Пока Спр.ПолучитьЭлемент()=1 Цикл
    
Если Спр.ЭтоГруппа()=0 Тогда
Если (Спр.Уровень()<=1) Тогда
    
СпрКод=Спр.Код;
СпрКодПослеДеления=Окр(Число(СпрКод)/2);
Если (Число(СпрКод)/2)=СпрКодПослеДеления Тогда
// * Четное число
 
Спр.Родитель=Чет;
 
     Иначе
// * Нечетное число
 
Спр.Родитель=Нечет;
 
КонецЕсли;
Спр.Записать();
 
КонецЕсли;
КонецЕсли;
 
КонецЦикла;
      
+3 - не работает ...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Arden
5 - 12.02.2009 - 11:45
(4) ну запускай отладчик тогда, у меня твой код поделил сотрудников пополам.

Интересные темы

odines.ru
20.01.2021 - 18:29
Смотри также:
Вопрос по УРИБ
Срочно нужен sauron - восстановление MD
Обмен между платформами 8->7.7

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
6 - 12.02.2009 - 11:51
+ Запускал. НЕ делит. Если ставить Спр.ВыбратьЭлементы(1) - то работает только с одним элементом и завершает цикл.  
А вот если после Спр.Записать(); добавить Спр.ВыбратьЭлементы(1); - то делит все эелементы. Но получается очень долго - даже если ввести транзакцию.

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
7 - 12.02.2009 - 11:52
На вскидку - код рабочий. Чет и Нечет не пусты случаем и типы не попутаны?
ЗЫ  % красивее

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Uho
8 - 12.02.2009 - 12:02
(5,6,7) потому что ДБФ/СКЛ

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
9 - 12.02.2009 - 12:06
Процедура ОтборЧетНечет1()
 
Спр=СоздатьОбъект("Справочник.Материалы");
Спр2=СоздатьОбъект("Справочник.Материалы");
Спр3=СоздатьОбъект("Справочник.Материалы");
 
Если Спр2.НайтиПоНаименованию("Четные")=0 Тогда
Спр2.НоваяГруппа();
Спр2.Наименование="Четные";
Спр2.Записать();
КонецЕсли;
 
Если Спр3.НайтиПоНаименованию("Нечетные")=0 Тогда
Спр3.НоваяГруппа();
Спр3.Наименование="Нечетные";
Спр3.Записать();
КонецЕсли;
 
Спр2.НайтиПоНаименованию("Четные");
Спр3.НайтиПоНаименованию("Нечетные");
Чет=Спр2.ТекущийЭлемент();
Нечет=Спр3.ТекущийЭлемент();
 
Спр.ВыбратьЭлементы(1);
 
НачатьТранзакцию();
 
Пока Спр.ПолучитьЭлемент()=1 Цикл
  
Если Спр.ЭтоГруппа()=0 Тогда
Если (Спр.Уровень()<=1) Тогда
    
СпрКод=Спр.Код;
СпрКодПослеДеления=Окр(Число(СпрКод)/2);
Если (Число(СпрКод)/2)=СпрКодПослеДеления Тогда
 
Спр.Родитель=Чет;
 
     Иначе
 
Спр.Родитель=Нечет;
 
КонецЕсли;
Спр.Записать();
Спр.ВыбратьЭлементы(1);
КонецЕсли;
КонецЕсли;
 
КонецЦикла;
ЗафиксироватьТранзакцию();
    
КонецПроцедуры
 
+ Вот весь код. Как бы ускорить обработку ?

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
10 - 12.02.2009 - 12:09
+ Что бы рассортировать 100 элементов - цикл крутится 5352 раза.

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Sadovnikov
11 - 12.02.2009 - 12:10
Есть такая замечательная команда UPDATE...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
12 - 12.02.2009 - 12:11
ИМХО находит не группы

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

lalex23
13 - 12.02.2009 - 12:18
тихо шизею...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
14 - 12.02.2009 - 12:21
(11) - не понял на счет команды - эта разве команда есть в 1С
(12) - Хм, на счет групп, если имеется ввиду поиск групп через НайтиПоНаименованию - то группы он находит и делает присвоение.    

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
15 - 12.02.2009 - 12:24
Выведи Чет и Нечет на форму уже и удостоверься. Все прекрасно работает без повторно открываемой выборки. Кроме родителя наименование не меняешь?

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
16 - 12.02.2009 - 12:27
(15)Нет наименование не меняю. Сейчас проверю ...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Uho
17 - 12.02.2009 - 12:44
(15,16) и все же у вас ДБФ или СКЛ

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Sadovnikov
18 - 12.02.2009 - 12:48
(14) Есть такая команда в 1С. Появляется после загрузки ВК 1С++.

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
19 - 13.02.2009 - 06:11
(15) С чет нечет все нормально
(17) база ДБФ
(18) Спасибо буду знать
+ ALL + Спасибо за помощь... Буду мучить код дальше...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
20 - 13.02.2009 - 07:42
+ Как говориться в продолжение ...
Прочитал о такой проблеме в архиве 1CT - http://abelov.com/kuban/162379.html
Пишут на SQL работает на DBF нет - будем ставить SQL :-)))

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
21 - 13.02.2009 - 07:55
Проверил на dbf - работает
Проверил на sql - работает

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
22 - 13.02.2009 - 07:55
Проверил на dbf - работает
Проверил на sql - работает

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Uho
23 - 13.02.2009 - 07:56
(20) а я че в (8) говорил? имхо, попробуй так:
  
Спр1=СоздатьОбъект(...);
Спр.ВыбратьЭлементы(0);
 

Пока Спр.ПолучитьЭлемент()=1 Цикл
    
Если Спр.ЭтоГруппа()=0 Тогда
Если (Спр.Уровень()<=1) Тогда
    
СпрКод=Спр.Код;
СпрКодПослеДеления=Окр(Число(СпрКод)/2);
Спр1.НайтиОбъект(Спр.ТекущийЭлемент());
Если (Число(СпрКод)/2)=СпрКодПослеДеления Тогда
// * Четное число
 
Спр1.Родитель=Чет;
 
     Иначе
// * Нечетное число
 
Спр1.Родитель=Нечет;
 
КонецЕсли;
Спр1.Записать();
 
КонецЕсли;
КонецЕсли;
 
КонецЦикла;

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
24 - 13.02.2009 - 07:59
+(21) Релиз?

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Uho
25 - 13.02.2009 - 08:04
(24) ну явно было что-то связано с ДБФ/СКЛ, может еще + релиз...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Uho
26 - 13.02.2009 - 08:05
(25) у меня, кстати, тоже и на ДБФ, и на СКЛ работает :))
ЗЫ. Только у меня форум тормозит также как и старый?

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
27 - 13.02.2009 - 08:09
(24) релиз - 7.70.502 и версия -  7.70.027
(23) сейчас попробую ...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

PIP
28 - 13.02.2009 - 08:17
А может по простому выбрать по родителю наполнить списокзначений, а потом заменить родителя, само собой два списка :)

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
29 - 13.02.2009 - 08:18
(23) Спр5.НайтиОбъект(Спр.ТекущийЭлемент()); - Поле агрегатного объекта не обнаружено (НайтиОбъект) - вот такое выдает ...

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

PIP
30 - 13.02.2009 - 08:22
ну или таблицазначений Элемент, Родитель
главное надежно :-)

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

roma n
31 - 13.02.2009 - 08:23
(27) конфа побоку. математика тоже 27.
(26) + как вариант используемые наборы ВК. Но вобще эффект прикольный. Ещё бы докопаться от чего он

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

PIP
32 - 13.02.2009 - 08:24
на форму обработки сразу выбрать нужных родителей

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

PIP
33 - 13.02.2009 - 08:33
виноват, не в тему, плохо прочел задачу (выбор по родителю это мимо).
А использовать ТЗ, и определять кого куда по коду

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Uho
34 - 13.02.2009 - 08:42
(31) о, кстати, с 1c++ или без пробовал?

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Гуня
35 - 13.02.2009 - 09:16
Я бы через запрос попробывал.

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
36 - 13.02.2009 - 09:39
+(29) Изменил НайтиОбъект на НайтиЭлемент - Спр5.НайтиЭлемент(Спр.ТекущийЭлемент()); - результат тот же - обрабатывает 1 элемент и выходит из цикла

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Uho
37 - 13.02.2009 - 09:59
(36) ну да, да - элемент... но вот это уже совсем странно...
ЗЫ. транзакцию убери

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

ronsel
38 - 13.02.2009 - 10:13
(37) Транзакцию убрал - та же картина ...  

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Cthulhu
39 - 13.02.2009 - 15:03
тСпрТЗ=СоздатьОбъект("ТаблицаЗначений"); тСпрТЗ.НоваяКолонка("Элемент","Справочник.ТМЦ"); тСпрТЗ.НоваяКолонка("НовыйРодитель","Справочник.ТМЦ");
тСпр=СоздатьОбъект("Справочник.ТМЦ"); тСпр.ВыбратьЭлементы(0);
Пока тСпр.ПолучитьЭлемент()=1 Цикл
Если (тСпр.Уровень()>1)И(тСпр.ТекущийЭлемент().ЭтоГруппа()=0) Тогда
тСпрТЗ.НоваяСтрока(); тСпрТЗ.ПолучитьСтрокуПоНомеру(тСпрТЗ.КоличествоСтрок());
тСпрТЗ.Элемент=тСпр.ТекущийЭлемент(); тСпрТЗ.НовыйРодитель=?(тСпр.Код%2=0,Чет,Нечет);
КонецЕсли;
КонецЦикла;
тСпрТЗ.ВыбратьСтроки();
НачатьТранзакцию();
Пока тСпрТЗ.ПолучитьСтроку()=1 Цикл тСпр.НайтиЭлемент(тСпрТЗ.Элемент); тСпр.Родитель=тСпрТЗ.НовыйРодитель; тСпр.Записать(); КонецЦикла;
ЗафиксироватьТранзакцию();

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

LuckyIzja
40 - 13.02.2009 - 15:33
Сколько элементов в справочнике?
Если в пределах 10 000, то я бы воспользовался стандартной обработкой UChoice.ert.
Проще и нагляднее.
(Если конечно, это разовая операция...)

Re: Как быстро программно изменить родителя n-го числа элементов ? в 7.7

Onegsky
41 - 13.02.2009 - 16:00
ronsel
Товарищ! Пишите на SQL с использованием 1C++ :
|UPDATE
|  СпрКонтр
|SET
|  СпрКонтр.ParentID= "' АЙДИШНИК '"
|FROM
|  $Справочник.Контрагенты as СпрКонтр
|
|WHERE
|  СпрКонтр.IsFolder = 2 AND
|  СпрКонтр.IsMark = 0";
К списку тем 1 > К списку форумов
Тема закрыта и находится в архиве.
Но Вы можете начать новую тему.
« Передать больше одного парметра в ОткрытьФорму(обработка,p,) - только через Список Значений? Транзакция по OLE »
© 2009 Форум 1С: Одинэс.Ру