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

Загрузка данных из XML

Автор Игорь_M, 28 янв 2015, 09:14

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

Игорь_M

Загружаю спецификацию материалов из файла XML. Все хорошо , но долго - секунд 10-15 наверное вместе с обработкой данных. Возник вопрос - правильно ли я загружаю - нет ли более оптимального способа? Сейчас делаю таким образом:
      ЧтениеXML.Прочитать();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента и ЧтениеXML.Имя = "Позиция" Тогда
               ЧтениеXML.Прочитать();
               Позиция = ЧтениеXML.Значение;
               
КонецЕсли;
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента и ЧтениеXML.Имя = "ОсновнойМатериал" Тогда
               ЧтениеXML.Прочитать();
и тд

подскажите нет ли более производительного способа?
и еще в левом нижнем углу идет счетчик накопленные/текущие вызовы , при загрузке XML получается 1000 - 1500 вызовов, это о чем говорит? в плане того, что это не показатель того, что все по уродски )?

LexaK

само чтение ХМЛ происходит быстро, дело в том как вы обрабатываете полученные данные.
если по каждому полученному значению, то это будет долго.

необходимо при чтении ХМЛ сформировать таблицу значений, потом одним запросом ее обработать (в одном запросе сделать все нужные поиски, расчеты и т.д.).
получится гораздо быстрее.
если помогло нажмите: Спасибо!

Игорь_M

что сходу смог переделал на запросы
вопрос такой- можно ли запросом выбрать из таблицы значений строки, где , скажем, Наименование, содержит строку (условно) "корпус"?  То есть из таблицы
- корпусная мебель
- двукорпусный стульчик
- ёжик
- и тд
нужно отобрать первые две строки. Можно ли такое организовать?

KrivosheevEV

Цитата: Игорь_M от 29 янв 2015, 15:09можно ли запросом выбрать из таблицы значений строки, где , скажем, Наименование, содержит строку (условно) "корпус"? 

Конфигуратор: F1 (не Ctrl+F1) -> Встроенный язык -> Работа с запросами -> Синтаксис текста запросов -> Ключевые слова и функции -> Операторы -> Логические операторы -> ПОДОБНО

"Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь.."

Игорь_M

подскажите что не так :
      |ГДЕ
      |        Полуфабрикаты.Наименование ПОДОБНО "%\_Партия\_%" СПЕЦСИМВОЛ "\" ;

LexaK

двойные кавычки нужны

    |где
    |    Полуфабрикаты.Наименование  ПОДОБНО ""%\_Партия\_%"" СПЕЦСИМВОЛ ""\""
если помогло нажмите: Спасибо!

Игорь_M

След вопрос возник - для выборки информации из справочника сделал такой запрос:
Запрос.Текст = "Выбрать *    
   |ИЗ     
   |        Справочник.Полуфабрикаты  КАК Полуфабрикаты                   
   |ГДЕ
   |        Полуфабрикаты.РабочийЦентр.Партиями = Истина и Полуфабрикаты.ФлагРаспределения = Ложь";
считая что выбираю все реквизиты справочника Полуфабрикаты, в том числе и ТЧ
при обращении к ТЧ вы дает ошибку "итератор для стр неопределен" - как будто это и не ТЧ вовсе
к ТЧ обращаюсь соответственно так:

    Для Каждого стр Из Выборка.РодитПФ Цикл

остальные реквизиты все на месте, только к ТЧ не могу обратиться никак . Подскажите чего делать
Добавлено: 06 фев 2015, 12:41


С предыдущим справился
Подскажите, что не так в этом условии :
|ГДЕ
|        Полуфабрикаты.Наименование ПОДОБНО &Наименование" ;
Наимен = Наименование +"_Партия_";
Запрос2.УстановитьПараметр("Наименование", "%" + Наимен + "%");

проблема  -пустая выборка, хотя строки содержащие все это присутствуют

LexaK

вам необходимо результат запроса получить как таблицу значений
тогда у вас будет работать цикл перебора

Выборка = Запрос.Выполнить().Выгрузить();
тогда обходы такие


Для каждого лкСтрТЗ из Выборка Цикл
    //...
    сообщить(лкСтрТЗ.Ссылка);
    Для каждого лкСтр из лкСтрТЗ.РодитПФ Цикл
        //...
        сообщить("тч " + лкСтр.НомерСтроки);
    КонецЦикла;
КонецЦикла;



если использовать Выборка = Запрос.Выполнить().Выбрать();
то и таблицы ТЧ - это результат запроса
и поступать с ними соответственно
если помогло нажмите: Спасибо!

Игорь_M

Прошу помощи по такому вопросу - имеется Полуфабрикат с Наименованием  "Раскрой_пластика_Партия_1" . Чтобы его найти сделал такой запрос:
Запрос2 = Новый Запрос;
Запрос2.Текст = "Выбрать ПЕРВЫЕ 1
|        Полуфабрикаты.Наименование,
|        Полуфабрикаты.ФлагРаспределения
|ИЗ     
|        Справочник.Полуфабрикаты  КАК Полуфабрикаты
|ГДЕ
|        Полуфабрикаты.Наименование ПОДОБНО ""%\_Партия\_%"" СПЕЦСИМВОЛ ""\""
|        и Полуфабрикаты.Наименование ПОДОБНО &Наименование
|УПОРЯДОЧИТЬ ПО
|        Полуфабрикаты.Наименование УБЫВ" ;
Наименование = ПолуфабрикатРазделяемый.Наименование;
Запрос2.УстановитьПараметр("Наименование", "%" + Наименование + "%" );

ПолуфабрикатРазделяемый.Наименование это "Раскрой_пластика"
Соответственно выборка пустая . Не связано ли это с тем что в Наименовании "Раскрой_пластика" содержится символ "_"? Если да, то как это обойти?

MuI_I_Ika

Я думаю, что здесь:

|        Полуфабрикаты.Наименование ПОДОБНО ""%\_Партия\_%"" СПЕЦСИМВОЛ ""\""
            |        и Полуфабрикаты.Наименование ПОДОБНО &Наименование

вы просто хотели поставить условие ИЛИ

Теги:

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

Рейтинг@Mail.ru

Поиск