Имя: Пароль:
1C
1С v8
создание документов из xml файла
,
0 Sniper9mm
 
22.09.11
10:30
Пытаюсь с помощью xml такого вида создать документы…………



- <V8Exch:Data>
 - <DocumentObject.ПоступлениеТоваровУслуг>
   <Контрагент>000001193</Контрагент>
     - <Услуги>
       - <Row>
         <Номенклатура>00004444</Номенклатура>
         </Row>
       </Услуги>
   </DocumentObject.ПоступлениеТоваровУслуг>

 - <DocumentObject.ПоступлениеТоваровУслуг>
   <Контрагент>000001194</Контрагент>
   - <Услуги>
     - <Row>
       <Номенклатура>00004443</Номенклатура>
       </Row>
     </Услуги>
   </DocumentObject.ПоступлениеТоваровУслуг>
 </V8Exch:Data>


Делаю так…..

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

        Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента и Чтение.Имя = "DocumentObject.ПоступлениеТоваровУслуг"  тогда
             ДобавитьЭлемент(Массив);
            Сообщить(Имя);
      КонецЕсли;
   КонецЦикла
КонецПроцедуры

Процедура ДобавитьЭлемент(Массив)
 НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
 НовыйДокумент = Документы.ПоступлениеТоваровУслуг.ПолучитьФормуНовогоДокумента();
 НовыйДокумент.Контрагент  = Справочники.Контрагенты.НайтиПоКоду(Массив.Контрагент);
 НовыйДокумент.Открыть();
КонецПроцедуры

В чём ошибка подскажите…. Или подскажите пример, немного не разберусь.
1 Maxus43
 
22.09.11
10:40
Пока Чтение.ПрочитатьАтрибут() Цикл
             Атрибут = Чтение.Значение;
         КонецЦикла;

и где он используется потом?

Что в Массиве то в итоге?
2 Sniper9mm
 
22.09.11
11:07
Атрибут не определён. ни где.

в массиве в итоге:
Контрагент
Номенклатура
3 Maxus43
 
22.09.11
11:09
Массив.Контрагент

думаеш так к массиву обращаться надо?
4 Maxus43
 
22.09.11
11:09
(3) + тьфу, вот что значит неолднозначные названия переменных)
5 Sniper9mm
 
22.09.11
11:12
документ то он вроде создаёт, вот тока 1 , а нужно 2.... нужно обратится думаю к Чтение.Имя = "DocumentObject.ПоступлениеТоваровУслуг" , тока как
6 Maxus43
 
22.09.11
11:22
НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
   НовыйДокумент.Контрагент  = Справочники.Контрагенты.НайтиПоКоду(Массив.Контрагент);
 НовыйДокумент.Записать();
НовыйДокумент.ПолучитьФормуЭлемента().Открыть();
7 Sniper9mm
 
22.09.11
11:43
блинн я чёт не понял ... почему так. поставил НовыйДокумент.Записать(); начало 2 документа формироваться.

понять не мог ведь сообщения 2 выходит.... почему тока один документ открывался
8 Sniper9mm
 
22.09.11
11:47
Maxus43 спасибо!!!!
9 Maxus43
 
22.09.11
11:50
надо записывать их в базу то вобще?
10 Sniper9mm
 
22.09.11
11:53
да
11 Maxus43
 
22.09.11
11:53
ну тогда ок
12 Sniper9mm
 
22.09.11
13:14
Не ругайтесь сильно… пытаюсь в табличную часть записать… не пишет.

Чтение.Имя = "Row" отладчиком смотрю походу всегда лож , как тут быть??

 Пока Чтение.Прочитать() Цикл
      ПолучитьXMLТип(Чтение);
      Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          Имя = Чтение.Имя;
          Сообщить(Имя);
          Пока Чтение.ПрочитатьАтрибут() Цикл
              Атрибут = Чтение.Значение;
          КонецЦикла;
      КонецЕсли;
      Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
          Массив.Вставить(Имя,Чтение.Значение);
          Сообщить(Чтение.Значение);
      КонецЕсли;
     

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

   
    Пока Чтение.Имя = "Row" Цикл
       Чтение.Прочитать();
       НоваяСтрока= НовыйДокумент.Услуги.Добавить();
       НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Массив.Номенклатура);
    КонецЦикла;

     НовыйДокумент.Записать();
     НовыйДокумент.Открыть();
     
    //////////////////////////////////////////////////////////////////////////
   
   
        Сообщить(Имя);
    КонецЕсли;
   КонецЦикла;
13 Sniper9mm
 
22.09.11
14:03
или вообще не так делаю??
14 Sniper9mm
 
22.09.11
14:47
Подскажите плизз , как записать каждую строку… а то тока одна записывается

- <Документ>
- <DocumentObject.ПоступлениеТоваровУслуг>
 <Контрагент>000001193</Контрагент>
- <Услуги>
- <Row>
 <Номенклатура>00000040346</Номенклатура>
 </Row>
- <Row>
 <Номенклатура>00000026714</Номенклатура>
 </Row>
 </Услуги>
 </DocumentObject.ПоступлениеТоваровУслуг>
 </Документ>

Чтение = Новый ЧтениеXML;
  Чтение.ОткрытьФайл("D:\ХМЛ\1.xml");
  Имя = Чтение.Имя;
  Массив = Новый Структура(Имя);
  Пока Чтение.Прочитать() Цикл
      ПолучитьXMLТип(Чтение);
      Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
          Имя = Чтение.Имя;
          Сообщить(Имя);
          Пока Чтение.ПрочитатьАтрибут() Цикл
              Атрибут = Чтение.Значение;
          КонецЦикла;
      КонецЕсли;
      Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
          Массив.Вставить(Имя,Чтение.Значение);
          Сообщить(Чтение.Значение);
      КонецЕсли;
     

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

 
     НовыйДокумент.Записать();
     НовыйДокумент.Открыть();
     
    //////////////////////////////////////////////////////////////////////////

        Сообщить(Имя);
    КонецЕсли;
   КонецЦикла;
15 Sniper9mm
 
22.09.11
15:50
хоть подскажите так правильно???


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

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

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

        Сообщить(Имя);
    КонецЕсли;
   КонецЦикла;