Имя: Пароль:
1C
1С v8
работа с xml файлом.
,
0 zippygrill
 
12.02.14
21:05
Что-то я туплю, совсем, с загрузкой данных из xml.
Так выглядит файл http://screencast.com/t/R60zlMIsLI6
Новую строку добавить в новой таблице когда встречается тэг "Строка" а вот как получить значении из тэга "Документ"?! и все это в линейную таблицу бы.

    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ПутьКФайлу); //ПутьКФайлу - Путь к загружаемому XML-документу указан в переменной  
    //Используется модель последовательного доступа.
    Пока Чтение.Прочитать() Цикл // Прочитать «структурные части» элементов.
        
        // Проверить, какая часть элемента текущая.
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            ИмяУзла = Чтение.Имя;
            Если ИмяУзла = "Строка" Тогда
                СчитатьСтрока = Истина;
                новСтр = ТабличнаяЧасть1.Добавить();
        КонецЕсли;
            
            
            Сообщить("--" + ИмяУзла);
            
            // Атрибуты элементов можно читать, только если текущая часть – начало элемента.
            
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
            ИмяУзла = Чтение.
            // В примере просто выводим текст в окно сообщений.    
            Сообщить("Текст:" + Чтение.Значение);
            
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            
            ИмяУзла = Чтение.Имя;
            Если ИмяУзла = "Строка" Тогда
                СчитатьСтрока = Ложь;
            КонецЕсли;
            // В примере просто выводим признак конца элемента в окно сообщений.
            Сообщить("--Конец:" + Чтение.Имя);
        КонецЕсли;
        
        
    КонецЦикла;
    Чтение.Закрыть();

Как дальше, не понимаю я.
1 zippygrill
 
12.02.14
21:06
з.ы. С xml раньше не работал.
2 zippygrill
 
12.02.14
21:12
структура файла вообще ни о чем :)
3 zippygrill
 
12.02.14
21:15
Дистрибьютор1/01.01.2001/бв-1111/Товар1/20 шт/20 руб./
Дистрибьютор1/01.01.2001/бв-1111/Товар2/10 шт/10 руб/

как-то так.
4 zippygrill
 
12.02.14
22:16
апну.
5 m-serg74
 
12.02.14
22:46
(0)

Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);
ТаблЗнач = Новый ТаблицаЗначений;
// создаем нужное количество колонок
//...............
Пока Чтение.Прочитать() Цикл
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        Если Чтение.Имя = "Строка" Тогда
            ПроцедураЧтенияСтроки(Чтение, ТаблЗнач.Добавить());
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

в ПроцедураЧтенияСтроки - обработка файла и заполнение строки ТЗ
6 zippygrill
 
12.02.14
22:51
(5) да, но как при добавлении новых строк как мне получить данные узлов "Номер" или "ТипДокумента"?
7 m-serg74
 
12.02.14
22:56
(6) ессно также ка и строку но до строки
8 m-serg74
 
12.02.14
22:59
(6) например вот посмотри
http://help1c.com/faq8/view/1321.html
9 zippygrill
 
12.02.14
23:15
(8) спс за ссылку.
10 zippygrill
 
13.02.14
00:29
ребята, что-то мне кажется этот код много, совсем много место занимает.

    Пока Чтение.Прочитать() Цикл // Прочитать «структурные части» элементов.
        
        // Проверить, какая часть элемента текущая.
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            ИмяУзла = Чтение.Имя;
            
            //тэг Данные
            Если ИмяУзла = "Дистрибьютор" Тогда
                СчитатьДистрибьютор = Истина;
                новСтр = ТабличнаяЧасть1.Добавить();
            КонецЕсли;
            
            Если ИмяУзла = "ДистрибьюторИНН" Тогда
                СчитатьДистрибьюторИНН = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "ДатаОтчета" Тогда
                СчитатьДатаОтчета = Истина;
            КонецЕсли;
            
            //тэг Документ
            Если ИмяУзла = "ТипДокумента" Тогда
                СчитатьТипДокумента = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "Дата" Тогда
                СчитатьДата = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "Номер" Тогда
                СчитатьНомер = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "ПокупательИНН" Тогда
                СчитатьПокупательИНН = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "ПокупательИмя" Тогда
                СчитатьПокупательИмя = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "Адрес" Тогда
                СчитатьАдрес = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "ПокупательКПП" Тогда
                СчитатьПокупательКПП = Истина;
            КонецЕсли;
            
            Если ИмяУзла = "Строка" Тогда
                СчитатьСтрока = Истина;
                //Если новСтр = Неопределено Тогда
                //    новСтр = ТабличнаяЧасть1.Добавить();
                //КонецЕсли;
            КонецЕсли;
            
            
            Сообщить("--" + ИмяУзла);
            
            // Атрибуты элементов можно читать, только если текущая часть – начало элемента.
            
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
            
            //запоминаем реквизиты шапки
            Если СчитатьДистрибьютор Тогда
                Дистрибьютор = Чтение.Значение;
            КонецЕсли;
            
            Если СчитатьДистрибьюторИНН Тогда
                ДистрибьюторИНН = Чтение.Значение;
            КонецЕсли;
            
            Если СчитатьДатаОтчета Тогда
                ДатаОтчета = Чтение.Значение;
            КонецЕсли;
            
            Если СчитатьТипДокумента Тогда
                ТипДокумента = Чтение.Значение;
            КонецЕсли;
            Если СчитатьДата Тогда
                Дата = Чтение.Значение;
            КонецЕсли;
            Если СчитатьНомер Тогда
                Номер = Чтение.Значение;
            КонецЕсли;
            Если СчитатьПокупательИНН Тогда
                ПокупательИНН = Чтение.Значение;
            КонецЕсли;
            Если СчитатьПокупательИмя Тогда
                ПокупательИмя = Чтение.Значение;
            КонецЕсли;
            Если СчитатьАдрес Тогда
                Адрес = Чтение.Значение;
            КонецЕсли;
            Если СчитатьПокупательКПП Тогда
                ПокупательКПП = Чтение.Значение;
            КонецЕсли;
            Если ИмяУзла = "ТоварКод" Тогда
                новСтр[ИмяУзла] = Чтение.Значение;
            КонецЕсли;
            
            Если ИмяУзла = "ТоварИмя" Тогда
                новСтр[ИмяУзла] = Чтение.Значение;
            КонецЕсли;
            
            Если ИмяУзла = "Количество" Тогда
                новСтр[ИмяУзла] = Чтение.Значение;
            КонецЕсли;
    
            Если ИмяУзла = "Цена" Тогда
                новСтр[ИмяУзла] = Чтение.Значение;
            КонецЕсли;

            Если ИмяУзла = "Сумма" Тогда
                новСтр[ИмяУзла] = Чтение.Значение;
                новСтр = ТабличнаяЧасть1.Добавить();
            КонецЕсли;
            новСтр.Дистрибьютор = Дистрибьютор;
            новСтр.ДистрибьюторИНН = ДистрибьюторИНН;
            новСтр.ДатаОтчета = ДатаОтчета;
            
            //тэг Документ
            новСтр.ТипДокумента = ТипДокумента;
            новСтр.Дата = Дата;
            новСтр.Номер = Номер;
            новСтр.ПокупательИНН = ПокупательИНН;
            новСтр.ПокупательИмя = ПокупательИмя;
            новСтр.Адрес = Адрес;
            новСтр.ПокупательКПП = ПокупательКПП;

            Сообщить("Текст:" + Чтение.Значение);
            
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            
            ИмяУзла = Чтение.Имя;
            Если ИмяУзла = "Дистрибьютор" Тогда
                СчитатьДистрибьютор = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "ДистрибьюторИНН" Тогда
                СчитатьДистрибьюторИНН = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "ДатаОтчета" Тогда
                СчитатьДатаОтчета = Ложь;
            КонецЕсли;
                
            //тэг Документ
            Если ИмяУзла = "ТипДокумента" Тогда
                СчитатьТипДокумента = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "Дата" Тогда
                СчитатьДата = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "Номер" Тогда
                СчитатьНомер = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "ПокупательИНН" Тогда
                СчитатьПокупательИНН = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "ПокупательИмя" Тогда
                СчитатьПокупательИмя = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "Адрес" Тогда
                СчитатьАдрес = Ложь;
            КонецЕсли;
            
            Если ИмяУзла = "ПокупательКПП" Тогда
                СчитатьПокупательКПП = Ложь;
            КонецЕсли;
            // В примере просто выводим признак конца элемента в окно сообщений.
            Сообщить("--Конец:" + Чтение.Имя);
        КонецЕсли;
        
        
    КонецЦикла;
    Чтение.Закрыть();
Независимо от того, куда вы едете — это в гору и против ветра!