Имя: Пароль:
1C
1С v8
Выгрузка в xml
0 Chuchi
 
23.07.11
11:32
выгружаю счета
догружаю до кучи номенклатуру (чтобы не было не определенных объектов)

код такой
//Выбрать номенклатуры соответствующих счетов    
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ различные        
   | номенклатура из Документ.СчетНаОплатуПокупателю.Товары где Ссылка.Дата между &ДатаС и &ДатаПО";
   Запрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
   Выборка = Запрос.Выполнить().Выбрать();
   m=0;
   Пока Выборка.Следующий () Цикл
       m=m+1;
       ОбработкаПрерыванияПользователя();
       ЗаписьXML.ЗаписатьНачалоЭлемента("ГруппаОбъектов");
           ЗаписьXML.ЗаписатьНачалоЭлемента("Справочник");
               ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
           ЗаписьXML.ЗаписатьКонецЭлемента();
       ЗаписьXML.ЗаписатьКонецЭлемента();
   КонецЦикла;

но в номенклатуре не появляется единица измерения и номенклатурная группа
не подскажите как их догрузить, это надо сделать в этом же цкле или надо отдельно как то прописывать?
1 Chuchi
 
23.07.11
15:32
я не так сформулировала?
2 Mnemonic1C
 
23.07.11
15:35
Тут с КД делов на пол часа от силы, не занимайся ерундой, уже давно все придумали
3 Chuchi
 
23.07.11
16:00
( да нельзя мне готового использовать(..мне надо самой все написать..у меня в качестве учебы эти задания..
4 Chuchi
 
23.07.11
16:27
дописала так
//Выбрать номенклатуры соответствующих счетов    
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ различные        
   | номенклатура из Документ.СчетНаОплатуПокупателю.Товары где Ссылка.Дата между &ДатаС и &ДатаПО";
   Запрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
   Выборка = Запрос.Выполнить().Выбрать();
   m=0;
   Пока Выборка.Следующий () Цикл
       m=m+1;
       ОбработкаПрерыванияПользователя();
           ЗаписьXML.ЗаписатьНачалоЭлемента("ГруппаОбъектов");
               ЗаписьXML.ЗаписатьНачалоЭлемента("Справочник");
                   ЗаписьXML.ЗаписатьНачалоЭлемента("БазоваяЕдиницаИзмерения" );
                       ЗаписьXML.ЗаписатьНачалоЭлемента("СтавкаНДС" );
                           ЗаписьXML.ЗаписатьНачалоЭлемента("НоменклатурнаяГруппа" );
                               ЗаписьXML.ЗаписатьНачалоЭлемента("СтранаПроисхождения" );
                                   ЗаписьXML.ЗаписатьНачалоЭлемента("НомерГТД");
                                       ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
                                   ЗаписьXML.ЗаписатьКонецЭлемента();
                               ЗаписьXML.ЗаписатьКонецЭлемента();
                           ЗаписьXML.ЗаписатьКонецЭлемента();
                       ЗаписьXML.ЗаписатьКонецЭлемента();
                   ЗаписьXML.ЗаписатьКонецЭлемента();
               ЗаписьXML.ЗаписатьКонецЭлемента();
           ЗаписьXML.ЗаписатьКонецЭлемента();
           КонецЦикла;

теперь все бы ничего но НомерГТД так и не переноситься, а ведь делаю по аналогии..
посмотрите пожалуйста...
5 Живой Ископаемый
 
23.07.11
16:37
у вас вообще ничего кроме номенклатуры не переносится, и понятно почему
потому что только одно заполняется:
ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
6 Chuchi
 
23.07.11
21:31
любопытно но страна и единица измерения переносятся при таком коде..
а как должно быть?
7 Chuchi
 
23.07.11
21:43
ой нет я не права(( не перекидывает ничего
8 Живой Ископаемый
 
23.07.11
23:37
давайте проще:
ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
ЗаписьXML.ЗаписатьКонецЭлемента();

ЗаписьXML.ЗаписатьНачалоЭлемента("БазоваяЕдиницаИзмерения");
ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.БазоваяЕдиницаИзмерения);
ЗаписьXML.ЗаписатьКонецЭлемента();

Это для начала.
9 Chuchi
 
24.07.11
15:28
кажется что то натворила не так((
выгрузка
ЗаписьXML=Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("c:\document.xml");
   ЗаписьXML.ЗаписатьНачалоЭлемента("Главный");

   //Выбрать номенклатуры соответствующих счетов    
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ различные        
   | номенклатура из Документ.СчетНаОплатуПокупателю.Товары где Ссылка.Дата между &ДатаС и &ДатаПО";
   Запрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
   Выборка = Запрос.Выполнить().Выбрать();
   m=0;
   Пока Выборка.Следующий () Цикл
       m=m+1;
       ОбработкаПрерыванияПользователя();
ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
   ЗаписьXML.Закрыть();


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

теперь после того как я вот так стала единицу измерения догружать и прочие поля у меня ошибка при загрузке выскакивает на строку

{Форма.Форма.Форма(204)}: Поле объекта не обнаружено (ОбменДанными)
           НовыйОбъект.ОбменДанными.Загрузка=Истина;
10 Живой Ископаемый
 
24.07.11
17:09
вы так никогда не убьетесь
11 Живой Ископаемый
 
24.07.11
17:17
купите Габца "Простые примеры..." или продайте за нее дьяволу душу, потому что по моим данным она больше не продается почему-то...
и читайте:

XML
i Как из одной базы перенести документ в другую базу?
// Выгрузить в файл xml.
ЗаписьXML=Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл("c:\doc.xml");
ЗаписьXML.ЗаписатьНачалоЭлемента("Root");

// Получить объект по ссылке.
ВыгружаемыйОбъект=Документ.ПолучитьОбъект();

// С помощью средств сериализации записать объект в файл.
ЗаписатьXML(ЗаписьXML,ВыгружаемыйОбъект);

ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();

ЧтениеXML=Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл("c:\doc.xml");

// Текущим становится элемент Root.
ЧтениеXML.Прочитать();

// Текущим становится элемент с документом.
ЧтениеXML.Прочитать();

// Проверить сможет ли с данным значением "справиться"
// система сериализации в данной базе.
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда

   // Получить ДокументОбъект.РеализацияТоваровУслуг
   ЗагружаемыйОбъект=ПрочитатьXML(ЧтениеXML);
   
   ЗагружаемыйОбъект.Записать();
КонецЕсли;

ЧтениеXML.Закрыть();
============

Предполагается что базы имеют одинаковые конфигурации



ЛИБО:



Как можно сформировать XML-документ произвольной структуры?
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ПутьКФайлу);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корневой");
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура");
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре");

Выборка = Справочники.Номенклатура.ВыбратьИерархически();

Пока Выборка.Следующий() Цикл
   Если Выборка.ЭтоГруппа Тогда
       Продолжить;
   КонецЕсли;

   Запись.ЗаписатьНачалоЭлемента("Элемент");
   Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
   Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул));
   Запись.ЗаписатьТекст(Выборка.Наименование);
   Запись.ЗаписатьКонецЭлемента();
КонецЦикла;

Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();



Как можно загрузить XML документ произвольной структуры?
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);

Пока Чтение.Прочитать() Цикл

   // Прочитать "структурные части" элементов.
   // Проверить, какая часть элемента - текущая.
   Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
       ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла);

       // Атрибуты элементов можно читать только если текущая часть -
       // начало элемента
       Пока Чтение.ПрочитатьАтрибут() Цикл

           // Прочитать данные узла атрибута.
           ТипУзла = Чтение.ТипУзла;
           Имя = Чтение.Имя;
           Значение = Чтение.Значение;

           // Обработать полученные значения.

       КонецЦикла;

   ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда

       // В примере просто выводим текст в окно сообщений.
       Сообщить("Текст:" + Чтение.Значение);

   ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда

       // В примере просто выводим признак конца элемента
       // в окно сообщений Сообщить("--Конец:" + Чтение.Имя);

   КонецЕсли;

КонецЦикла;
==============

а уж в сети сколько примеров - море.. И не рассказывайте никому как у вас не получается. Это никому не инетересно. Меняйте условие, экспериментируйте... Вот просто составьте табличку из двух колонок. справа - что делаете, в левой - что получилось.. Когда у вас в этой табличке окажется колоко 10-20 записей - вы заметите закономерность.
12 Chuchi
 
24.07.11
19:37
Загрузку сделала по вашему примеру, но едИзм все равно не переносит
   //Выбрать номенклатуры соответствующих счетов    
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ различные        
   | номенклатура из Документ.СчетНаОплатуПокупателю.Товары где Ссылка.Дата между &ДатаС и &ДатаПО";
   Запрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
   Выборка = Запрос.Выполнить().Выбрать();
   m=0;
   Пока Выборка.Следующий () Цикл
       m=m+1;
       ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
       ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
       ЗаписьXML.ЗаписатьКонецЭлемента();
       
        ЗаписьXML.ЗаписатьНачалоЭлемента("БазоваяЕдиницаИзмерения");
ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.БазоваяЕдиницаИзмерения);
ЗаписьXML.ЗаписатьКонецЭлемента();

   КонецЦикла;
13 Chuchi
 
24.07.11
22:18
... да может и стоит ругаться на меня но с опытов в два месяца многого не понимаешь... примеры чужие тоже надо уметь понимать но ниодного примера я не видела с решением такого вопроса, стала бы я разве просить помощи..
14 Живой Ископаемый
 
25.07.11
08:27
ну а как писали загрузку?
15 Chuchi
 
25.07.11
09:26
как у вас было написано
ЧтениеXML=Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл("c:\doc.xml");

// Текущим становится элемент Root.

ЧтениеXML.Прочитать();

// Текущим становится элемент с документом.

ЧтениеXML.Прочитать();

// Проверить сможет ли с данным значением "справиться"

// система сериализации в данной базе.

Если ВозможностьЧтенияXML(ЧтениеXML) Тогда

   // Получить ДокументОбъект.РеализацияТоваровУслуг

   ЗагружаемыйОбъект=ПрочитатьXML(ЧтениеXML);
   
   ЗагружаемыйОбъект.Записать();
КонецЕсли;

ЧтениеXML.Закрыть();
16 Wobland
 
25.07.11
09:49
(12) ПолучитьОбъект() к единице измерения!
17 Chuchi
 
25.07.11
09:51
да это уже исправила а в базе все равно не появляется
18 Chuchi
 
25.07.11
22:48
разобралась с тем вопросом, теперь позвольте уточнить а как обратиться к данным родитель - в справочнике номенклатуры это группа номенклатуры

//Выбрать номенклатуры соответствующих счетов    
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ различные        
   | номенклатура из Документ.СчетНаОплатуПокупателю.Товары где Ссылка.Дата между &ДатаС и &ДатаПО";
   Запрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
   Запрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
   Выборка = Запрос.Выполнить().Выбрать();
   m=0;
   Пока Выборка.Следующий () Цикл
       m=m+1;
       ЗаписьXML.ЗаписатьНачалоЭлемента("ГруппаОбъектов");
       ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
       ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
       ЗаписьXML.ЗаписатьКонецЭлемента();
       
       
       Если ЗначениеЗаполнено(Выборка.Номенклатура.БазоваяЕдиницаИзмерения) тогда
           ЗаписьXML.ЗаписатьНачалоЭлемента("БазоваяЕдиницаИзмерения");
           ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.БазоваяЕдиницаИзмерения.ПолучитьОбъект());
           ЗаписьXML.ЗаписатьКонецЭлемента();
       КонецЕсли;
19 Chuchi
 
25.07.11
23:39
наверно опять не правильно спросила
..
лучше тогда на примере справочника контрагенты
там в форме есть поле группа контрагентов но как такового реквизита такого нет
вот как его загрузить в xml
20 hhhh
 
26.07.11
00:07
ну, Контрагент.Родитель
21 Chuchi
 
26.07.11
00:27
СПАСИБО СПАСИБО СПАСИБО!
22 Chuchi
 
26.07.11
00:29
ураааа
почти все
еще один вопрос
я также выгружаю/загружаю реализациюТоваровУслуг
как мне снять отметку при загрузке о проведении документа, а то галочка о проведении переноситься а в сущности документ в базе приемнике не проводиться
//Реализация выбрать за период
   ДатаПо = ?(ЗначениеЗаполнено(ДатаПо), конецдня(ДатаПо), ТекущаяДата()) ;
   Выборка = Документы.РеализацияТоваровУслуг.Выбрать (ДатаС, КонецДня(ДатаПо));;
   n=0;
   Пока Выборка.Следующий () Цикл
       n=n+1;
             

       ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
       ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
       ////////////////////////////Выборка.Проведен=Ложь;

       ЗаписьXML.ЗаписатьКонецЭлемента();
   КонецЦикла;
23 Wobland
 
26.07.11
06:16
>как мне снять отметку при загрузке о проведении документа
записать в режиме отмены проведения?