Имя: Пароль:
1C
1C 7.7
v7: Перенос справочника
0 Garikus
 
10.05.18
18:25
Доброго времени суток, просьба не кидаться тяжелыми предметами, с 77 уже как 5 лет не занимался.
Подскажите где косяк?
Имеется БП 4.5
Требуется материалы перенести в номенклатуру

Спр = СоздатьОбъект("Справочник.Материалы");
  Спр.ВыбратьЭлементы();
  СпрСотр = СоздатьОбъект("Справочник.Номенклатура");     
  Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если Спр.ТекущийЭлемент().ЭтоГруппа()=0 Тогда
    //  Если Спр.ТекущийЭлемент().ЭтоГруппа()=0 Тогда
       
    СпрСотр.Новый();
    СпрСотр.Наименование = Спр.Наименование;
    СпрСотр.Записать();
    СпрСотр.ПолнНаименование = Спр.Наименование;
    
    Если СпрСотр.НайтиПоНаименованию(спр.Родитель,Спр.Родитель.Код) = 1 тогда  
            СпрСотр.Родитель =СпрСотр.ТекущийЭлемент();
    КонецЕсли;
    едИзм = СоздатьОбъект("Справочник.ЕдиницыИзмерений");
    Если едИзм.НайтиПоНаименованию(спр.ЕдиницаИзмерения) = 1 тогда
    СпрСотр.ЕдиницаИзмерения =едИзм.ТекущийЭлемент() ;
    КонецЕсли;
     СпрСотр.Цена = Спр.Цена;
    СпрСотр.ТипТовара = Перечисление.ТипыТоваров.Собственный;
    СпрСотр.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар;
    СпрСотр.Записать();
    сообщить("Наименование "+спр.Наименование+" Код "+спр.код);
КонецЕсли;
Получаю в конце элемент не выбран
1 Amra
 
10.05.18
18:28
Если СпрСотр.НайтиПоНаименованию(спр.Родитель,Спр.Родитель.Код) = 1 тогда  
            СпрСотр.Родитель =СпрСотр.ТекущийЭлемент();
    КонецЕсли;

Это что вообще? И 7.7 тут не причем
2 Garikus
 
10.05.18
18:30
(1) В номенклатуре есть уже созданные папки 1 в 1 Метериалы = номенклатура
3 Ёпрст
 
10.05.18
18:31
(0) ищи родителя в другой переменной, ну и вот это перепиши

Спр.ТекущийЭлемент().ЭтоГруппа()=0
4 Ёпрст
 
10.05.18
18:35
ну и если лень использовать рекурсию, то, в начале создаешь все элементы и группы в одну кучку, затем делаешь еще один проход и назначаешь родителей.

+ при создании элементов и групп проверяешь сперва, что такого еще нет.
5 Ёпрст
 
10.05.18
18:41
Типа того:
СпрМатериалы = СоздатьОбъект("Справочник.Материалы");
СпрМатериалы.ВыбратьЭлементы();
  СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");    
  Пока СпрМатериалы .ПолучитьЭлемент() = 1 Цикл
     Если СпрНоменклатура.НайтиПоКоду(СпрМатериалы.Код,1)=0 Тогда
     Если СпрМатериалы.ЭтоГруппа()=1 Тогда
         СпрНоменклатура.НоваяГруппа();
         СпрНоменклатура.Код = СпрМатериалы.Код;
         СпрНоменклатура.Наименование= СпрМатериалы.Наименование;
         СпрНоменклатура.Записать();
      Иначе
         СпрНоменклатура.Новый();
         СпрНоменклатура.Код = СпрМатериалы.Код;
         СпрНоменклатура.Наименование= СпрМатериалы.Наименование;
//         ......остальные  реквизиты
         СпрНоменклатура.Записать();
      КонецЕсли;
КонецЕсли;
//далее еще одна выборка и просто заполнить реквизит Родитель, ищя его так-же по коду.
Усё
6 Ёпрст
 
10.05.18
18:42
ну или ищи всё по наименованию, если уверен, что они у тя уникальные во всём справочнике
7 Garikus
 
10.05.18
18:46
(6) Громадное спасибо