Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:19

Не могу получить цены номенклатуры

Автор 3d_killer, 05 июн 2014, 18:58

0 Пользователей и 1 гость просматривают эту тему.

3d_killer

Написал обработку экспорта в xml и необходимо выгрузить помимо разные типы цен и никак не могу это сделать. Сама обработка:

Перем ДОМ;  // XML instace

Процедура Сохранить()
  ДОМ.save("c:\1.xml");     
КонецПроцедуры    // Сохранить




//**********************************************************************
// УстановитьАтрибут(Узел, ИмяАтрибута, ЗначениеАтрибута)
// Описание
// Добавляет атрибут к узлу
// Узел - тип IXMLDOMNode
// ИмяАтрибута - строка
// ЗначениеАтрибута - любое, приводится к строке
Процедура УстановитьАтрибут(Узел, ИмяАтрибута, ЗначениеАтрибута)
  Атрибут = ДОМ.createAttribute(ИмяАтрибута);
  Атрибут.Value = Строка(ЗначениеАтрибута);
  Узел.setAttributeNode(Атрибут);
КонецПроцедуры    // УстановитьАтрибут(Имя, Значение)   




//Выборка элементов
Процедура ДобавитьЭлементы(ИзГруппы,ВУзел,В_ДОМ)
    ЭлСпр = СоздатьОбъект("Справочник.Номенклатура"); 
    //Рекурсия
    Если СокрЛП(ИзГруппы)<>"" Тогда
        ЭлСпр.ИспользоватьРодителя(ИзГруппы);
    КонецЕсли;
    //Выбираем элементы
    ЭлСпр.ВыбратьЭлементы();
       //Цикл перебора товаров
       Пока ЭлСпр.ПолучитьЭлемент(0) = 1 Цикл 
        Если ЭлСпр.ЭтоГруппа() = 1 Тогда
            //Это группа
            //Сообщить("Группа");
           
            Группа = В_ДОМ.createNode(1,"Группа","");
            УстановитьАтрибут(Группа, "Код", ЭлСпр.Код);
            УстановитьАтрибут(Группа, "Наименование", Строка(ЭлСпр.Наименование));
            УстановитьАтрибут(Группа, "ПолноеНаименование", Строка(ЭлСпр.ПолнНаименование));
            УстановитьАтрибут(Группа, "Родитель", Строка(ЭлСпр.Родитель.Код));
            ВУзел.appendChild(Группа);
           
            ДобавитьЭлементы(ЭлСпр.ТекущийЭлемент(),Группа,В_ДОМ);
        Иначе
                //Это товар
            //Сообщить("Товар");
           
           
           
            //Необходимо вытащить цену товара
            //*******************************************
            СпрЦены = СоздатьОбъект("Справочник.Цены");
            СпрЦены.ИспользоватьВладельца(ЭлСпр);   
           
            СпрЦены.НайтиПоНаименованию("Минимальные");   
           
            //СпрЦены.ВыбратьЭлементы();
            Цена = СпрЦены.Цена.Получить();
           
            //Запись элемента номенклатуры
            Элемент = В_ДОМ.createNode(1,"Элемент","");
            УстановитьАтрибут(Элемент, "Код", ЭлСпр.Код);
            УстановитьАтрибут(Элемент, "Наименование", Строка(ЭлСпр.Наименование));
            УстановитьАтрибут(Элемент, "ПолноеНаименование", Строка(ЭлСпр.ПолнНаименование));       
            УстановитьАтрибут(Элемент, "Родитель", Строка(ЭлСпр.Родитель.Код));
            УстановитьАтрибут(Элемент, "Цена", Строка(Цена));
            ВУзел.appendChild(Элемент);
            Сообщить(Цена);   
        КонецЕсли;   
    КонецЦикла; 
КонецПроцедуры
//*******************************************
Процедура Сформировать() 
    Спр = СоздатьОбъект("Справочник.Номенклатура");
       ДОМ    = СоздатьОбъект("MSXML2.DOMDocument");
    //Create a processing instruction targeted for xml.
    Узел = ДОМ.createProcessingInstruction("xml", "version='1.0' encoding='windows-1251'");
    ДОМ.appendChild(Узел);                                // добавляем новый подчиненный узел. Это тэг <?xml version="1.0" ?>
    Корень = ДОМ.createElement("Справочник_"+Спр.Вид());             // создаем корневой элемент
    УстановитьАтрибут(Корень, "ВерсияФормата", "1.0");
    УстановитьАтрибут(Корень, "ДатаВыгрузки", ""+ДатаЧисло(ТекущаяДата())+"."+ДатаМесяц(ТекущаяДата())+"."+ДатаГод(ТекущаяДата()));
    ДОМ.appendChild(Корень);                              // добавляем корневой элемент в структуру ДОМ
    Состояние("Выгружается . . .");   
    ДобавитьЭлементы("",Корень,ДОМ);
    Сохранить();
    Сообщить("Выгружено в C:\1.xml");   
КонецПроцедуры



тут цена выгружается тут только одного типа который идет первый по списку а надо несколько других, помогите решить данную проблемку

3d_killer

вот тут что то не дописал:
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(ЭлСпр);   
СпрЦены.НайтиПоНаименованию("Минимальные");
Цена = СпрЦены.Цена.Получить();

Кошки рулят

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

3d_killer

написал:

СпрЦены = СоздатьОбъект("Справочник.Цены");
         СпрЦены.ИспользоватьВладельца(ЭлСпр);         
         СпрЦены.ВыбратьЭлементы();
         Пока СпрЦены.ПолучитьЭлемент()=1 Цикл
            Если СпрЦены.НайтиПонаименованию("Розничные",0,1) = 1 Тогда
               Цена = СпрЦены.Цена.Получить();
            КонецЕсли;
         КонецЦикла;

Ошибка не выбран элемент
Добавлено: 05 июн 2014, 20:33


на эту строку Пока СпрЦены.ПолучитьЭлемент()=1 Цикл
Добавлено: 05 июн 2014, 22:32


Как вы написали, работает только теперь значение в цикле меняется и я получаю последний тип цен на выходе, условие поставить я не знаю как. Так как в переменной СпрЦены не содержится информации о типе цены, как мне сделать напишите пожалуйста

Кошки рулят

Цитата: 3d_killer от 05 июн 2014, 20:31Ошибка не выбран элемент

Больной чтоли?
У тебя идет перебор справочника, а ты в нем ищешь какой-то дураций элемент по наименованию, сбивая выборку.
Лечись!
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(ЭлСпр);
СпрЦены.ВыбратьЭлементы();

Пока СпрЦены.ПолучитьЭлемент()=1 Цикл
    ТипЦены=СпрЦены.Наименование;
    Цена = СпрЦены.Цена.Получить(РабочаяДата());
КонецЦикла


3d_killer

Благодарю за помощь, и прошу не судить строго я программист ПХП, 1c практически не знаю.
В данном коде так же я не могу определить тип цены, так как : ТипЦены=СпрЦены.Наименование; Значение пустое.
В справочнике в типе цен забиты названия
Добавлено: 05 июн 2014, 23:02


В том и проблема что в Справочник.Цены нет такого реквизита как Наименование

Кошки рулят

Цитата: 3d_killer от 05 июн 2014, 23:00В том и проблема что в Справочник.Цены нет такого реквизита как Наименование

Давай ты будешь шифроваться, паясничать и кривляться, а я буду строить из себя телепата и угадывать какая у тебя конфигурация, какой у тебя тип цены?
Ты ведь думаешь, что только у тебя Дела, а все остальные - делишки обтяпывают, да от безделья маются и просто мечтают угадывать твои безграмотные коды?
И ты прав!!! Мир крутится вокруг тебя!!! ...

3d_killer

Торговля и склад редакция 9.2 версия 1с 7.7
Тип цен который есть это закупочные, мелкооптовые, оптовые, минимальные и розничные
Если смотреть в товаре то забиты 3 цены: закупочные, минимальные, розничные (интересует минимальная цена в обработке)


Добавлено: 06 июн 2014, 10:27


ТипЦены=СпрЦены.ТипЦен; так правильно

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск