7.7 Работа с подчинённым справочником

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

  1. TopicStarter Overlay
    mark2011
    Offline

    mark2011

    Регистрация:
    30 июн 2011
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте!

    В общем стоит задача прайс-лист сконвертить в XML-формат. Накодил вот такую процедуру:

    Код:
    
    Процедура Сформировать()
    Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
    Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") <> 1 Тогда
    Предупреждение("Компонента v7plus.dll не найдена!");
    КонецЕсли;
    КонецЕсли;
    
    ФайлХМЛ = СоздатьОбъект("AddIn.XMLParser");
    Корень =ФайлХМЛ.СоздатьДокумент();
    Данные =Корень.СоздатьПодчиненныйЭлемент("root");
    ТОПИК= Данные.СоздатьПодчиненныйЭлемент("Topic");
    СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");   
    СпрЦены           = СоздатьОбъект("Справочник.Цены");
    
    СпрНоменклатура.ВыбратьЭлементы();        
    
    Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл
    Номенкл = ТОПИК.СоздатьПодчиненныйЭлемент("Nomenkl"); 
    ЭлементКод            =    Номенкл.СоздатьПодчиненныйЭлемент("ELEMID");
    РодитКод            =    Номенкл.СоздатьПодчиненныйЭлемент("RODITKOD");
    ИМЯ1                =    Номенкл.СоздатьПодчиненныйЭлемент("NAME"); 
    АртикулНазв            =     Номенкл.СоздатьПодчиненныйЭлемент("ARTICUL");   
    МинОстаток            =     Номенкл.СоздатьПодчиненныйЭлемент("MIN_OST");  
    Описание            =     Номенкл.СоздатьПодчиненныйЭлемент("DESCR"); 
    Комментарйи            =     Номенкл.СоздатьПодчиненныйЭлемент("COMMENT");
    Уровень                =     Номенкл.СоздатьПодчиненныйЭлемент("LEVEL");   
    Цена                =     Номенкл.СоздатьПодчиненныйЭлемент("PRICE"); 
    
    
    
    РодНаим               =    СпрНоменклатура.ТекущийЭлемент().Родитель;
    КодРод                 = Роднаим.Код;                                    
    ЭлементКод.Значение     =     СпрНоменклатура.ТекущийЭлемент().Код;        
    АртикулНазв.Значение  =   ?(ПустоеЗначение(СпрНоменклатура.ТекущийЭлемент().Артикул)=1,0,СпрНоменклатура.ТекущийЭлемент().Артикул);
    РодитКод.Значение   =    ?(ПустоеЗначение(КодРод)=1,0,КодРод);     
    МинОстаток.Значение =    ?(ПустоеЗначение(СпрНоменклатура.ТекущийЭлемент().МинОстаток)=1,0,СпрНоменклатура.ТекущийЭлемент().МинОстаток);
    
    ИМЯ1.Значение     =    СпрНоменклатура.ТекущийЭлемент().Наименование;    
    Символ               =   Найти(ИМЯ1.Значение, "*");                  
    Описание.Значение =        СпрНоменклатура.ТекущийЭлемент().ПолнНаименование;
    Комментарий          =      СпрНоменклатура.ТекущийЭлемент().Комментарий;
    
    
    Если РодитКод.Значение = "0" Тогда
    Уровень.Значение = 1;    
    ИначеЕсли Символ = 1 Тогда
    Уровень.Значение = 2;
    Иначе          
    Уровень.Значение = 3;
    КонецЕсли;       
    
    [b]СпрЦены.ИспользоватьВладельца(СпрНоменклатура.ТекущийЭлемент());
    Пока СпрЦены.ПолучитьЭлемент(0) = 1 Цикл
    Сообщить(СпрЦены.Владелец.Цена);
    КонецЦикла;[/b]
    КонецЦикла;
    ИмяФайла    = "report.xml";
    ПапкаФайла  = "C:�REPORT�";
    Корень.Записать(ПапкаФайла+ИмяФайла);
    
    КонецПроцедуры
    
    
    
    Кроме названий товаров там есть ещё и цены. Очевидно хранятся в подчинённом справочнике. И на том куске кода, который помечен тегами b - b, я получаю ошибку "Элемент не выбран".

    Вопрос: в чём проблема? почему так происходит?
  2. sergejk74
    Offline

    sergejk74 Опытный в 1С

    Регистрация:
    15 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    сделай так

    Код:
    //			Если СпрНоменклатура.ЭтоГруппа() = 0 Тогда
    СпрЦены.ИспользоватьВладельца(СпрНоменклатура.ТекущийЭлемент());
    СпрЦены.ВыбратьЭлементы();
    Пока СпрЦены.ПолучитьЭлемент() = 1 Цикл
    Сообщить(СпрЦены.Цена);
    КонецЦикла;				
    //			КонецЕсли;
    
  3. TopicStarter Overlay
    mark2011
    Offline

    mark2011

    Регистрация:
    30 июн 2011
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Сделал. Вот именно в таком виде, в котором ты написал, выдаёт "НеизвестныйОбъект".

    Если сделать так:

    Код:
    //			Если СпрНоменклатура.ЭтоГруппа() = 0 Тогда
    СпрЦены.ИспользоватьВладельца(СпрНоменклатура.ТекущийЭлемент());
    СпрЦены.ВыбратьЭлементы();
    Пока СпрЦены.ПолучитьЭлемент() = 1 Цикл
    Сообщить(СпрЦены.ТекущийЭлемент());
    КонецЦикла;				
    //			КонецЕсли;
    
    
    Тогда выводится просто строка "руб.". Предполагаю, что здесь проблема в том, что нужно обрабатывать табличную часть, а не строковую..... но возможно я и не прав....
  4. sergejk74
    Offline

    sergejk74 Опытный в 1С

    Регистрация:
    15 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Все цены в одной валюте?
  5. TopicStarter Overlay
    mark2011
    Offline

    mark2011

    Регистрация:
    30 июн 2011
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Да, спасибо тебе огромное )))
    Сейчас буду думать, как вывести обе цены, ибо по умолчанию выводится розничная цена, а в базе должны присутствовать обе - и опт и розница. Это обязательно.
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Там есть ссправочник ТипЦен

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