Вход | Регистрация


1С:Предприятие ::

Метки:справочники

Еще про перенос элементов справочника в другую группу

Я
   GoshaV
 
30.11.04 - 08:26
Читал, что тема избита. Но не могу перенести программно элементы в др. группу. Подскажите, что не так делаю.
    СпрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
    СпрОСЭл=СоздатьОбъект("Справочник.ОсновныеСредства");
    СпрОСЭл.ВыбратьЭлементы();
    Счетч=0;
Пока СпрОСЭл.ПолучитьЭлемент() = 1 Цикл 

            Если СпрОСЭл.ПервоначСтоимость<1000 тогда
        СпрОс.НайтиПоНаименованию("Гр1"); 
                Группа999 = СпрОс.ТекущийЭлемент();
             СпрОсЭл.ИспользоватьРодителя(Группа999);
                СпрОсЭл.Записать();

Пробовал и через СпрОсЭл.УстановитьАтрибут, СпрОсЭл.Родитель - не переносятся, и надо бы программно удалить группы, из которых перенесены элементы, применение Группа.Удалить() приводит к ошибке БД.
 
 
   Морозов Александр
 
1 - 30.11.04 - 08:52
СпрОсЭл.Родитель=Группа999;

Но и так работать не будет, скажет что нарушена выборка
   laeg
 
2 - 30.11.04 - 09:07
СпрОСРод = СоздатьОбъект("Справочник.ОсновныеСредства");
СпрОС    = СоздатьОбъект("Справочник.ОсновныеСредства");
СпрОСЭл  = СоздатьОбъект("Справочник.ОсновныеСредства");
СпрОСЭл.ВыбратьЭлементы();
Счетч=0;
Пока СпрОСЭл.ПолучитьЭлемент() = 1 Цикл
    Если СпрОСЭл.ПервоначСтоимость<1000 тогда
       СпрОс.НайтиЭлемент(спрОСЭЛ.ТекущийЭлемент());
       СпрОсРод.НайтиПоНаименованию("Гр1"); 
       СпрОс.Родитель = СпрОСРод.ТекущийЭлемент();;
       СпрОс.Записать();
   Морозов Александр
 
3 - 30.11.04 - 09:19
(2) Тоже не будет.
   laeg
 
4 - 30.11.04 - 09:43
(3)
Тогда через запрос
1. Сделать в запросе выборку элементов справочника удовлетворяющие данному условию
2. При обходе запроса менять родителя

Результат 100%
   GrayT
 
5 - 30.11.04 - 10:05
Элемент является родителем самого себя?
СпрОс.Родитель = СпрОСРод.ТекущийЭлемент(); - Оригинально!
   laeg
 
6 - 30.11.04 - 10:24
(5)
Ню-Ню ....
СпрОсРод.НайтиПоНаименованию("Гр1");// моно добавить ("Гр1",,1) - если конечно нет элемента с таким наименованием

СпрОс.Родитель = СпрОСРод.ТекущийЭлемент();

Единственный косяк в том что нет проверки на группы ... а оно мне надо ?
   GrayT
 
7 - 30.11.04 - 10:29
Род не заметил
   Бивень
 
8 - 30.11.04 - 10:53
(4) Мдя ... Абасцацца ...
   laeg
 
9 - 30.11.04 - 11:01
(8)
Ну дык что тебе мешает
Действуй слоник !!! :))))))))
   Бивень
 
10 - 30.11.04 - 11:04
(9) Хочешь я научу тебя правильно программно переносить элемент в другую группу?
 
  Рекламное место пустует
   Бивень
 
11 - 30.11.04 - 11:05
(10)+ Это чтоб ты больше не тупил, как чайник ...
А то выступаешь ты тут часто и вопрос "Как программно перенести элемент в другую группу?" тоже частый ...
   Прохожий
 
12 - 30.11.04 - 11:10
Нужно использоавать не :
.
СпрОСЭл.ВыбратьЭлементы();
Пока СпрОСЭл.ПолучитьЭлемент() = 1 Цикл
.
а
.
Пока СпрОСЭл.ВыбратьЭлементы() = 1 Цикл
СпрОСЭл.ПолучитьЭлемент();
.
Всё просто.
   laeg
 
13 - 30.11.04 - 11:10
(10) флаг в руки
   laeg
 
14 - 30.11.04 - 11:13
(12)
Только перед
Пока СпрОСЭл.ВыбратьЭлементы() = 1 Цикл
спрОСЭл.ИспользоватьРодителя()
   Бивень
 
15 - 30.11.04 - 11:14
(12) Тебе тоже надо ЖКК перечитать ...
   GoshaV
 
16 - 01.12.04 - 09:39
Поговорили..., ну а кто научит все же, как сделать то?
   Оборотень
 
17 - 01.12.04 - 10:30
Мне кажется, что нарушается порядок выборки. Попробуй развязать элемент получаемый из выборки с выборкой. Например с пом ещё одного эл-та СпрОСЭл2

   СпрОС=СоздатьОбъект("Справочник.ОсновныеСредства"); 
  //***

   СпрОСЭл2=СоздатьОбъект("Справочник.ОсновныеСредства"); 
  //***

   СпрОСЭл=СоздатьОбъект("Справочник.ОсновныеСредства"); 
   СпрОСЭл.ВыбратьЭлементы(); 
   Счетч=0; 
Пока СпрОСЭл.ПолучитьЭлемент() = 1 Цикл 

        Если СпрОСЭл.ПервоначСтоимость<1000 тогда 
          СпрОс.НайтиПоНаименованию("Гр1"); 
         //***    

          СпрОСЭл2.НайтиЭлемент(СпрОсЭл.ТекущийЭлемент());
          СпрОСЭл2.Родитель=СпрОс.ТекущийЭлемент();
          СпрОсЭл2.Записать(); 
         //***
   Оборотень
 
18 - 01.12.04 - 10:37
(17) ошибочка получается 
Можно попробовать 
СпрОсЭл2.Записать(); 

поместить в другое место

Пока СпрОСЭл.ПолучитьЭлемент() = 1 Цикл 
  Если СпрОсЭл2.Выбран()=1 Тогда//Чтобы при первом проходе ошибка не вылетела

    СпрОсЭл2.Записать(); 
  КонецЕсли;

//... И после конца цикла


КонецЦикла;
 СпрОсЭл2.Записать();//потому что последний элемент не записан.
   GrayT
 
19 - 01.12.04 - 10:38
GoshaV, откуда ты пытаешься это сделать?
   Бивень
 
20 - 01.12.04 - 10:56
(19) Мне становится стыдно за тебя ...
   GrayT
 
21 - 01.12.04 - 10:57
(20)Что не так?
   Бивень
 
22 - 01.12.04 - 10:58
Всем чайникам из этой ветки срочно читать про метод ВыбратьЭлементы()!
   GrayT
 
23 - 01.12.04 - 11:00
(22)Как это относиться к моему вопросу?
   Бивень
 
24 - 01.12.04 - 11:03
(23) А так и относится ... Чайник ты тоже ... Вот и весь сказ ... :))
   GrayT
 
25 - 01.12.04 - 11:05
Зато теплый.
   GoshaV
 
26 - 01.12.04 - 15:10
вышеприведенный код работает, но проходов по циклу то 12, то 28 то еще сколько то , вместо 5 тыс и никакой системы не вижу, блин, вопрос с виду несложный, а сколько времени отнял
   Бивень
 
27 - 01.12.04 - 15:34
(26) Это потому, что ты не читал про метод ВыбратьЭлементы() ...
   GoshaV
 
28 - 01.12.04 - 15:43
я наверное самый тупой в 1С, хотя в дельфях написал более 30 прог, а тут не вьеду совершенно, и про ВыбратьЭлементы() только что с лупой не почитал, мля, регбусы какие то.
   GoshaV
 
29 - 02.12.04 - 12:52
Сделал, спасибо Оборотень за пинок в нужном направлении.
   Бивень
 
30 - 02.12.04 - 12:59
(29) Мля ... Я офуеваю ...
   Бивень
 
31 - 02.12.04 - 13:01
ВыбратьЭлементы(<?>)
Синтаксис:
ВыбратьЭлементы(<Режим>)
Назначение:
Открыть выборку элементов справочника.
Возвращает: 1 - если действие выполнено и в выборке есть хотя бы один элемент;
0 - если действие не выполнено или в выборке нет ни одного элемента.
Параметры:
<Режим> - как выбирать:
1 - выбирать элементы с учетом иерархии,

**** ВНИМАНИЕ! *****

0 - выбирать элементы без учета иерархии (необязателен, по умолчанию - 1).

**** КонецВнимания *****

Замечание:
Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект.
   Барбариска
 
32 - 02.12.04 - 13:06
(30),(31) не вынесла душа...? )))
А всего-то неполных три десятка постов...
   GoshaV
 
33 - 02.12.04 - 13:10
Бивень, я допер до этого нуля в параметре, но не осмысленно, а методом тыка, трудно сразу было носом ткнуть?, или надо понимать что подразумевали умные составители ЖКК под иерархией, или все это понимают однозначно, тогда откуда ошибки?
 
 
   Бивень
 
34 - 02.12.04 - 13:17
(32) Дык ветке то уже два дня ... :))
Неужели ты всё это время за ней наблюдала и молчала? ...
Завидую твоей выдержке ...
   Барбариска
 
35 - 02.12.04 - 13:20
(34) точно - наблюдала и молчала ))) Лениво как-то, да и работы полно.
Зато автор сам носом тыкнулся туда, куда его не тыкнули - а потому это забудет не скоро )))



Список тем форума
Рекламное место пустует  
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует