Имя: Пароль:
1C
1C 7.7
v7: Объект не может быть перепозиционирован!
0 Trotter
 
08.06.16
07:31
Если ПустоеЗначение(РодДляТД) = 1 Тогда
        Сообщить("Прервано");
        Возврат;
    КонецЕсли;
        
    Искомый = "{ТД}";
    нСпр = СоздатьОбъект("Справочник.Номенклатура");
    нСпр.ВыбратьЭлементы();
    Пока нСпр.ПолучитьЭлемент() = 1 Цикл
        ТекЭл = нСпр.ТекущийЭлемент();
        Если Найти(СокрЛП(нСпр.Наименование), СокрЛП(Искомый)) > 0 Тогда
            ТекЭл.Родитель = "";
            Если ТекЭл.Родитель <> РодДляТД Тогда
                ТекЭл.Родитель = РодДляТД;
                нСпр.Записать();
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла;

Как правильно переместить найденный объект в другую группу, почему вываливается сабж ?
1 big
 
08.06.16
07:36
нСпр.ВыбратьЭлементы(0);
2 Zmich
 
08.06.16
07:36
(0). Сбивается выборка сменой родителя.
3 vcv
 
08.06.16
07:37
Пройтись по справочнику и запомнить нужные элементы в списке значений. Потом перебрать значения в списке и как надо их изменять.
Или выбрать элементы не перебором справочника, а запросом. ТОгда результаты запроса выгрузить в таблиццу значений. Строки таблицы перебрать, записывая как надо элементы.
4 Zmich
 
08.06.16
07:39
Кажется, был в 7-ке  метод, позволяющий не иерархически выбирать элементы, что-то типа ПорядокКодов. Тогда выборка не сбивается.
5 vcv
 
08.06.16
07:43
У ТС есть группа, которую перебирать надо (РодДляТД).
Не самое разумное решение перебирать весь справочник без иерархии. Вдруг там несколько сотен тысяч элементов :)
6 vcv
 
08.06.16
07:43
(5) Ой, нет, вру. Это группа, куда перемещать надо.
7 big
 
08.06.16
07:56
интересно вот это

ТекЭл.Родитель = "";
Если ТекЭл.Родитель <> РодДляТД Тогда


зачем сравнивать заведомо пустое значение с чем либо?
8 ifso
 
08.06.16
08:04
(7)
> зачем сравнивать заведомо пустое значение с чем либо?
ну а вдруг, не?
9 Trotter
 
08.06.16
08:50
Приведите пример пожалуйста как сделать. А то добавляю в ТЗ. А в неё добавляются пустые строки )
ТЗ.Номенклатура = нСпр - так нельзя ?) Хотя написано, что можно писать любой тип (ТипЗначенияСтр(нСпр) "Справочник")
10 Зая Бусечка
 
08.06.16
08:51
ТЗ.Номенклатура = нСпр.ТекущийЭлемент()
11 пипец
 
08.06.16
08:54
вот и выросло поколение не понимающее клюшки )))
ЗЫ достаточно перепозиционировать выборку
12 big
 
08.06.16
08:58
(9)  Пробовал выборку делать без иерархии, как в (1) показано?
13 Bigbro
 
08.06.16
09:30
нСпр2 = СоздатьОбъект("Справочник.Номенклатура");
...
нСпр2.НайтиЭлемент(нСпр);
наСпр2.Родитель=РодДляТД;
нСпр2.Записать();
14 Trotter
 
08.06.16
09:42
С тз вот так вот не работает
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        Если ТЗ.Номенклатура.Родитель <> РодДляТД Тогда
             ТЗ.Номенклатура.Родитель = РодДляТД;
        КонецЕсли;
    КонецЦикла;
Сейчас (13) Попробую
15 пипец
 
08.06.16
09:45
(14) в этом случае

нСпр2 = СоздатьОбъект("Справочник.Номенклатура");
ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        Если ТЗ.Номенклатура.Родитель <> РодДляТД Тогда



...
нСпр2.НайтиЭлемент(ТЗ.Номенклатура);
наСпр2.Родитель=РодДляТД;
нСпр2.Записать();


        КонецЕсли;
    КонецЦикла;
16 пипец
 
08.06.16
09:45
нСпр2.Родитель=РодДляТД;
17 Trotter
 
08.06.16
09:55
(15) Спасибо. Да так заработало. Только долго чёт ) Правда позиций 1000+ секунд 30... )
18 пипец
 
08.06.16
10:01
(17) Запрос по справочнику с условием потом
ТЗЗЗ=создатьобъект("ТаблицаЗначений");

Запрос.Выгрузить(ТЗЗЗ,0,0);

Потом перебираешь ТЗ , быстрее будет
19 Ёпрст
 
08.06.16
10:03
(18) зачем там ТЗ
20 Ёпрст
 
08.06.16
10:03
?
21 пипец
 
08.06.16
10:03
+ а если еще перед выборкой ТЗ поставить начатьтранзакцию а после зафиксироватьтранзакцию ))) еще быстрее
22 Ёпрст
 
08.06.16
10:03
И ..быстрее будет, открыть для себя Uchoice или update
23 пипец
 
08.06.16
10:04
(19) в (15) - написано "в этом случае" (с) про без ТЗ было уже описано
24 пипец
 
08.06.16
10:06
(22)  Если Найти(СокрЛП(нСпр.Наименование), СокрЛП(Искомый)) > 0 Тогда  строка из (0) не смутила ? )
25 Trotter
 
08.06.16
10:17
(24) Чем она кого - то должна смутить ?)
Она говорит об моём дилетантском уровне ?)
26 Ёпрст
 
08.06.16
10:18
(24) нет, ючойз может искать по наименованию и поиск по подстроке тоже есть
27 пипец
 
08.06.16
10:52
(26) ну для этого как минимум нужно знать, что они есть ... ))) по мне так порой проще за 5-ть минут написать - чем копаться в сборнике обработок )))
(25) не в этом дело - не все универсальные обработки - сильно универсальны ...