Изменение подчиненности элемента в прайс листе

Новая тема
"Люди добрые помогите. Пытаюсь написать код, при котором автоматически менялась бы подчиненность в справочнике прайс-лист, при изменении подчиненности в справочнике номенклатура. Вот код:
Процедура ПриПереносеЭлементаВДругуюГруппу()
спр=СоздатьОбъект("Справочник.ПрайсЛист");
спр1=СоздатьОбъект("Справочник.Номенклатура");
текэл = Спр1.ТекущийЭлемент();
спр.НайтиПоНаименованию(текэл);
спр.Родитель=Спр1.Родитель;  
спр.Выгружен=0;
спр.Записать();  
СтатусВозврата(0);
Возврат;
КонецПроцедуры  

Выдает сообщение об ошибке

{Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль(205)}: Не выбран элемент!
спр.Родитель=Спр1.Родитель;  

Где может быть ошибка? "
"Интересно как это все понимать:
> спр=СоздатьОбъект("Справочник.ПрайсЛист");
Спр - это Прайс лист, ладно.

> спр1=СоздатьОбъект("Справочник.Номенклатура");
Спр1 - это номенклатуры

> текэл = Спр1.ТекущийЭлемент();
Извините, а что вы получите через ТекущийЭлемент(), если после создания объекта ничего не выбирали? Может сначала найдете интересующий вас объект.

> спр.НайтиПоНаименованию(текэл);
А это вообще бред - НайтиПоНаименованию подразумевает, что ищется наименование. А вы вместо наименования подсовываете Объект, да еще и Номенклатуры. Конечно преобразование в строку пройдет, но вы уверены, что результатом будет именно наименование? К тому же ищите Наименование Прайса = Наименованию Номенклатуры (может конечно они у вас и равны по каким-то причинам)

> спр.Родитель=Спр1.Родитель;  
И это писк, который переводиться так: ПрайсЛист = Номенклатура. :)

Короче - ошибок пруд пруди :)
"
"Процедура ПриПереносеЭлементаВДругуюГруппу(ТекЭл, НовГр)

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

Спр.НайтиПоНаименованию(НовГр.Наименование);
НовГрПрайсЛиста = Спр.ТекущийЭлемент();

спр.НайтиПоНаименованию(текэл.Наименование);
Спр.Родитель = НовГрПрайсЛиста;
Спр.Записать();

КонецПроцедуры


"
"Что то я мучался, мучался... не могу вспомнить в какой конфигурации есть этот справочник. Точно помню, что видел, но где не помню. Вроде в каких то старых релизах "Торговля и склад". Там смысл был в том, что помимо справочника номенклатуры существовал отдельный справочник "ПрайсЛист", куда можно было добавлять ссылки на справочник номенклатуры и организовать в нем отражение лишь нужной части справочника номенклатуры и сгруппировать их каким то иным образом, не обязательно совпадающим с группировками справочника Номенклатуры. Поскольку вы такую задачу решаете, выходит, что у вас справочники Номенклатуры и Прайс лист по структуре синхронны. Исходя из этого соображения, вот вариант решения:

В форме списка справочника Номенклатура пишем:
Процедура ПриПереносеЭлементаВДругуюГруппу(Элемент,Группа)
  ПрайсЛист=СоздатьОбъект("Справочник.ПрайсЛист");
  Если ПрайсЛист.НайтиПоРеквизиту("Товар",Элемент)=1 Тогда
     ПарныйЭлементВПрайсЛисте=ПрайсЛист.ТекущийЭлемент();
     СтруктураГрупп=СоздатьОбъект("СписокЗначений");
     Если ПустоеЗначение(Группа)=0 Тогда
        ТекГруппа=Группа;
        Пока 1=1 Цикл
           СтруктураГрупп.ДобавитьЗначение(ТекГруппа);
           ТекГруппа=ТекГруппа.Родитель;
           Если ПустоеЗначение(ТекГруппа)=1 Тогда
              Прервать;
           КонецЕсли;
        КонецЦикла;
     КонецЕсли;
     ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=1;
     ПрайсЛист.ИспользоватьРодителя(ПолучитьПустоеЗначение("Справочник.ПрайсЛист"));
     РазмерСтруктурыГрупп=СтруктураГрупп.РазмерСписка();
     Для i=1 По РазмерСтруктурыГрупп Цикл
        НомерГруппыВСтруктуре=РазмерСтруктурыГрупп-i+1;
        Если ПрайсЛист.НайтиПоНаименованию(СтруктураГрупп.ПолучитьЗначение(НомерГруппыВСтруктуре).Наименование,1,1)=1 Тогда
           ПрайсЛист.ИспользоватьРодителя(ПрайсЛист.ТекущийЭлемент());
        Иначе
           ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=0;
           Прервать;
        КонецЕсли;
     КонецЦикла;
     Если ПозиционированиеВСтруктуреГруппПрайсЛистаКорректно=1 Тогда
        НовыйРодительВПрайсЛисте=ПрайсЛист.ТекущийЭлемент();
        Если ПрайсЛист.НайтиЭлемент(ПарныйЭлементВПрайсЛисте)=1 Тогда
           ПрайсЛист.Родитель=НовыйРодительВПрайсЛисте;
           ПрайсЛист.Записать();
        КонецЕсли;
     КонецЕсли;
  КонецЕсли;
КонецПроцедуры"
Я не волшебник, я только учусь. Спасибо за критику. Учту.
Большое спасибо! Просто огромное! Все работает!
Читают тему
(гостей: 1)

Быстрый переход