Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
14 Дек 2017, 01:57
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Помогите написать обработку выгрузки в XML  (Прочитано 12978 раз)

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

Оффлайн vidok

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-03-31
  • Сайт: 
  • Профессия: Ученик 1С
   Здравствуйте, такая задачка: УТ базовая 8.1. Две идентичные базы, нужно периодически обмениваться двумя документами: ПоступлениеТоваровУслуг и ОтчетОрозничныхПродажах.
    Планы обмена отпадают, да и у стандартной обработки- выгрузка/загрузка в XML долго идет инициализация при ее открытии и поэтому не очень подходит.
P.S. С документом необходимо выгружать номенклатуру и контрагентов.

Попытался с малого, выгрузить всю номенклатуру и документы за период:

Процедура Выгрузка(Элемент)      
ЗаписьXML=Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл("c:\document.xml");
    ЗаписьXML.ЗаписатьНачалоЭлемента("Главный");

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

Выборка = Документы.ПоступлениеТоваровУслуг.Выбрать (ДатаС, ДатаПо);
Пока Выборка.Следующий () Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;

    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();
Сообщить("Выгружено");
КонецПроцедуры


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

создаю новую позицию и документ поступление - выгружаю - получаю сообщение:
У единицы хранения остатков номенклатуры "" неверно указан владелец!
У единицы для отчетов номенклатуры "" неверно указан владелец!

Помогите довести до ума обработку, подскажите что в ней нужно исправить\добавить


Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
При интерактивном создании элемента Номенклатуры, автоматически создаются элементы Единица хранения остатков и Единица для отчетов. Соответственно, когда идет программная запись номенклатуры во второй базе, то он не находит Единицы хранения остатков и отчетов.
Выход: Нужно перетаскивать вместе с номенклатурой еще и единицы хранения остатков и отчетов. Причем, при создании их в новой базе, придется записывать их хитро:

ОбъектНоменклатура.ОбменДанными.Загрузка=Истина;
ОбъектНоменклатура.Записать();
ОбъектЕдиницаХраненияОстатков.Владелец=ОбъектНоменклатура.Ссылка;
ОбъектЕдиницаХраненияОтчетов.Владелец=ОбъектНоменклатура.Ссылка;
ОбъектЕдиницаХраненияОстатков.Записать();
ОбъектЕдиницаХраненияОтчетов.Записать();


xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн vidok

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-03-31
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо что откликнулись. Но как это применить в данной обработке?

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Ну как-то вот так:
Процедура Выгрузка(Элемент)      
    ЗаписьXML=Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл("c:\document.xml");
    ЗаписьXML.ЗаписатьНачалоЭлемента("Главный");
   
    Выборка = Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий () Цикл
           ЗаписьXML.ЗаписатьНачалоЭлемента("Справочник");
           ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
           ЗаписьXML.ЗаписатьКонецЭлемента();

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

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

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

               ОбъектЕдиницыХраненияОстатков.Владелец=НовыйОбъект.Ссылка;
               ОбъектЕдиницыХраненияОстатков.Записать();

               ОбъектЕдиницыДляОтчетов.Владелец=НовыйОбъект.Ссылка;
               ОбъектЕдиницыДляОтчетов.Записать();
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    ДанныеXML.Закрыть();
    Сообщить("Загружено");
КонецПроцедуры

Плюс, можно еще одну вложенность сделать - чтобы Номенклатура->Единица хранения остатков->Единица для отчетов были объединены, например, элементом "ГруппаОбъектов".

p.s. Могла накосячить в чтении объектов - проверить было негде.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн vidok

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-03-31
  • Сайт: 
  • Профессия: Ученик 1С
да, ругается на объекты, на оба. Как еще можно попробовать?

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Убедили, пошла тестить...
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Процедура ОсновныеДействияФормыВыгрузить(Кнопка)
    ЗаписьXML=Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл("c:\document.xml");
    ЗаписьXML.ЗаписатьНачалоЭлемента("Главный");
   
    Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий () Цикл
ОбработкаПрерыванияПользователя();
                ЗаписьXML.ЗаписатьНачалоЭлемента("Справочник");
                ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
                ЗаписьXML.ЗаписатьКонецЭлемента();

ЗаписьXML.ЗаписатьНачалоЭлемента("ГруппаОбъектов");

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

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

ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЦикла;   
   
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();
    Сообщить("Выгружено");   
КонецПроцедуры


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

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

Если ВозможностьЧтенияXML(ДанныеXML) Тогда
ОбъектЕдиницыДляОтчетов = ПрочитатьXML(ДанныеXML);
ОбъектЕдиницыДляОтчетов.Владелец=НовыйОбъект.Ссылка;
ОбъектЕдиницыДляОтчетов.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ДанныеXML.Закрыть();
Сообщить("Загружено");
КонецПроцедуры
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
Соответвтенно, первая процедура - выгрузка, вторая - загрузка. Забыла переименовать.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн Klyacksa

  • Фрилансер. Милости прошу с задачами в личку.
  • Глобальный модератор
  • *****
  • Сообщений: 1325
  • РЕПУТАЦИЯ: 430
  • КПД: 32%
  • Регистрация: 2010-08-20
  • Сайт: 
  • Профессия: Программист 1С
И последний дубль без опечаток  :nhsrm: :
Процедура Выгрузка(Кнопка)
    ЗаписьXML=Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл("c:\document.xml");
    ЗаписьXML.ЗаписатьНачалоЭлемента("Главный");
   
    Выборка = Справочники.Номенклатура.Выбрать(,,Новый Структура("Код","00000000143"));
Пока Выборка.Следующий () Цикл
ОбработкаПрерыванияПользователя();

ЗаписьXML.ЗаписатьНачалоЭлемента("ГруппаОбъектов");

ЗаписьXML.ЗаписатьНачалоЭлемента("Справочник");
        ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
        ЗаписьXML.ЗаписатьКонецЭлемента();

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

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

ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЦикла;   
   
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();
    Сообщить("Выгружено");   
КонецПроцедуры

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

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

Если ВозможностьЧтенияXML(ДанныеXML) Тогда
ОбъектЕдиницыДляОтчетов = ПрочитатьXML(ДанныеXML);
ОбъектЕдиницыДляОтчетов.Владелец=НовыйОбъект.Ссылка;
ОбъектЕдиницыДляОтчетов.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ДанныеXML.Закрыть();
Сообщить("Загружено");
КонецПроцедуры
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Оффлайн vidok

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-03-31
  • Сайт: 
  • Профессия: Ученик 1С
спасибо огромное!!! всё работает!!!


Теги:
 

Помогите срочно!! В вкладке "Сервис"--> "Журнал регистрации" отражаются все операции как можно определить сделаны ли операции "задним числом" и как вычислить первоначальную информацию какой расчет поменял на другой?

Автор 2ronРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 4292
Последний ответ 24 Дек 2015, 15:34
от дфтын
Помогите подобрать Back-office и Front-office

Автор avrnskРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 5551
Последний ответ 07 Сен 2010, 12:01
от mohock
Помогите с отчётами в УТ 10.3. (Ведомость по товарам и ведомость по заказам)

Автор chum710Раздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 5888
Последний ответ 28 Мар 2012, 13:02
от chum710
Помогите с отчетом "Валовая прибыль"

Автор Dm109Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 4366
Последний ответ 10 Сен 2015, 13:57
от Dm109
помогите с отчетом "характеристики контрагентов"

Автор Vasya PovarРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 1978
Последний ответ 07 Дек 2016, 15:53
от Kironten

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
178 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
39 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
29 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 182
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal