7.7 Перенос элемен.справочника в группу

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем ged, 28 мар 2008.

  1. TopicStarter Overlay
    ged
    Offline

    ged

    Регистрация:
    19 июл 2007
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    Есть справочник
    -----------------------------------------------
    |Код - | |
    |(символы, 7зн | Наименование |
    -----------------------------------------------
    Группа1 Группа1
    6575487 Наименование 1
    6575486 Наименование 2
    6575485 Наименование 3
    6580001 Наименование 4


    Нужно по признаку первых трех символов кода (напр.657) перенести в Группу1
    Написал обработку:


    Код:
    Процедура Выполнить()
    Спр = СоздатьОбъект("Справочник.Мой");
    Если Спр.НайтиПоКоду("Группа1",0)=1 Тогда
    НовГруппа=Спр.ТекущийЭлемент();
    КонецЕсли;
    
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если (Лев(Спр.Код,3)="657") и (Спр.Родитель<>НовГруппа) Тогда
    Спр.Родитель = НовГруппа;
    Спр.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    

    По данной обработке находится только 1(один) элемент справочника, переносится в группу и перебор справочника останавливается.
    Пробовал ИспользоватьВладельца(""); не помогает.
    Прошу Вашей помощи, уважаемые.
  2. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура Выполнить()
    Спр = СоздатьОбъект("Справочник.Мой");
    Спр1 = СоздатьОбъект("Справочник.Мой");
    Если Спр.НайтиПоКоду("Группа1",0)=1 Тогда 
    НовГруппа=Спр.ТекущийЭлемент();
    КонецЕсли;
    Спр1.ВыбратьЭлементы();
    Пока Спр1.ПолучитьЭлемент()=1 Цикл
    Если (Лев(Спр.Код,3)="657") и (Спр1.Родитель<>НовГруппа) Тогда
    Спр1.Родитель = НовГруппа;    
    Спр1.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
    
    так попробуй
  3. TopicStarter Overlay
    ged
    Offline

    ged

    Регистрация:
    19 июл 2007
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    У меня вообще-то на форме обработки есть РеквизитДиалога типа "Справочник.Мой"
    и группу для переноса я беру из него.

    Сразу не написал, решил покороче изложить.
  4. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    если Х = РеквизитДиалога со значением "Справочник.Мой"
    Код:
    Процедура Выполнить()
    Спр = СоздатьОбъект("Справочник.Мой");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если (Лев(Спр.Код,3)="657") и (Спр.Родитель<>Х) Тогда
    Спр.Родитель = Х;
    Спр.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
    
    
  5. TopicStarter Overlay
    ged
    Offline

    ged

    Регистрация:
    19 июл 2007
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    1
    у меня так и есть. И перебор кончается после первой смены родителя у найденного элемента.
  6. Kaboom
    Offline

    Kaboom Опытный в 1С

    Регистрация:
    2 июл 2007
    Сообщения:
    158
    Симпатии:
    0
    Баллы:
    26
    Может проблема в том что нельзя менять родителя в выборке элементов... В всяком случае наименование точно нельзя менять. Попробуй так:
    Код:
    Процедура Выполнить()
    Спр = СоздатьОбъект("Справочник.Мой");
    СписокЭлементов = СоздатьОбъект("СписокЗначений");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если (Лев(Спр.Код,3)="657") и (Спр.Родитель<>Х) и (Спр.ТекущийЭлемент()<>Х) Тогда
    СписокЗначений.ДобавитьЗначение(Спр.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;
    
    НачатьТранзакцию();
    Для Сч = 1 По СписокЗначений.РазмерСписка() Цикл
    Спр.НайтиЭлемент(СписокЗначений.ПолучитьЗначение(Сч));
    Спр.Родитель = Х;
    Спр.Записать();
    КонецЦикла;    
    ЗафиксироватьТранзакцию();
    
    КонецПроцедуры
    
    
    
  7. romich1981
    Offline

    romich1981

    Регистрация:
    29 мар 2008
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Код:
    Процедура Выполнить()
    Спр = СоздатьОбъект("Справочник.Мой");
    СписокЭлементов = СоздатьОбъект("СписокЗначений");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если (Лев(Спр.Код,3)="657") и (Спр.Родитель<>Х) и (Спр.ТекущийЭлемент()<>Х) Тогда
    СписокЗначений.ДобавитьЗначение(Спр.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;
    
    НачатьТранзакцию();
    Для Сч = 1 По СписокЗначений.РазмерСписка() Цикл
    Спр.СоздатьОбъект("Справочник.Мой");
    Спр.НайтиЭлемент(СписокЗначений.ПолучитьЗначение(Сч));
    Спр.Родитель = Х;
    Спр.Записать();
    КонецЦикла;    
    ЗафиксироватьТранзакцию();
    
    КонецПроцедуры
    
    
    [/quote]

Поделиться этой страницей