Вход | Регистрация

  1  2
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Експорт в XML

v7: Експорт в XML
Я
   bananan
 
09.01.13 - 13:20
Данные выдает запрос... Их нужно формить в XML-файл.
Код написал такой (это понятно, только начало работы):
    ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.ВыбратьСтроки();
    
    
    XMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
    XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент();
    ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("EMPLOYEES");
    стр = 1;
    
    Пока ТЗ.ПолучитьСтроку()=1 цикл                      
        Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("ID");
        Ветка.Значение = стр;
    КонецЦикла;
Выдает ошибку: Ветка.Значение = стр;
{\\SERVER12\VPKTEST$\EXTFORMS\ЗАРПЛАТАXML.ERT(58)}: Параметр не опциональный
Что я нетак делаю?
 
 
   Dolly_EV
 
101 - 10.01.13 - 14:27
0! 100!
   bananan
 
102 - 10.01.13 - 14:59
Вопрос по v7plus.
Код такой:
    XMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
    XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент();
    ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("DATAPACKET");
    Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO");
    Ветка.УстановитьАтрибут("SHEDULE_DATE", ВыбВыплатаЗПБ.ДатаДок);         
    Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ВыбВыплатаЗПБ.НомерДок);
    Ветка.УстановитьАтрибут("PAYER_BANK_BRANCHID", ВыбВыплатаЗПБ.Фирма.РС.БанкМФО);
    Ветка.УстановитьАтрибут("PAYER_BANK_ACCOUNTNO", ВыбВыплатаЗПБ.Фирма.РС.БанкСчет);
    Ветка.УстановитьАтрибут("TOTAL_SHEDULE_AMOUNT", Строка(ВыбВыплатаЗПБ.Итог("Сумма")))// TOTAL_SHEDULE_AMOUNT - Общая сумма зарплатной ведомости в формате ГРН,КОП
 
    Ветка.УстановитьАтрибут("CONTRAGENT_CODEZKP", ВыбВыплатаЗПБ.Фирма.РС.Банк.ЕГРПОУ);
    
    Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
    Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл             
        Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
        Ветка.УстановитьАтрибут("IDENTIFYCODE", ВыбВыплатаЗПБ.Сотрудник.ИНН)// Идентификационный код сотрудника
 
        Ветка.УстановитьАтрибут("TABNO", ВыбВыплатаЗПБ.Сотрудник.Код)// Табельный номер сотрудника 
 
        Ветка.УстановитьАтрибут("CARDACCOUNTNO", "123123");// Номер карточного (или другого) счёта сотрудника.
 
        Ветка.УстановитьАтрибут("AMOUNT", ВыбВыплатаЗПБ.Сумма);//Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
 
    КонецЦикла;
XMLКорневойРаздел.Записать(ИмяФайлаXML);
Так вот тут с узлами непонятное делается:
Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO"); - элемент создается нормально и нормально в конце файла ест закрывающий тег...
а вот:
Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
так в открывающем теге сразу же после имени идет / - закрытие елемента
а у меня в елементе EMPLOYEES несколько елементов EMPLOYEE
т.е. схматично примерно так:
<EMPLOYEES>
  <EMPLOYEE .../>
  <EMPLOYEE .../>
  <EMPLOYEE .../>
  <EMPLOYEE .../>
<EMPLOYEES />
У меня же файл формируется не такой а такой:
<EMPLOYEES/>
  <EMPLOYEE IDENTIFYCODE="3376400724" TABNO="2156" CARDACCOUNTNO="123123" AMOUNT="1239.02"/>
  <EMPLOYEE IDENTIFYCODE="3376400777" TABNO="2121" CARDACCOUNTNO="123123" AMOUNT="1239.02"/>
   monsterZE
 
103 - 10.01.13 - 15:22
попробуй "разделить ветки" =)
   bananan
 
104 - 10.01.13 - 15:29
(103) Это как?
Вот полный код :
    XMLАнализатор = СоздатьОбъект("AddIn.XMLParser");
    XMLКорневойРаздел = XMLАнализатор.СоздатьДокумент();
    ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("DATAPACKET");
    Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO");
    Ветка.УстановитьАтрибут("SHEDULE_DATE", ВыбВыплатаЗПБ.ДатаДок);         
    Ветка.УстановитьАтрибут("SHEDULE_NUMBER", ВыбВыплатаЗПБ.НомерДок);
    Ветка.УстановитьАтрибут("PAYER_BANK_BRANCHID", ВыбВыплатаЗПБ.Фирма.РС.БанкМФО);
    Ветка.УстановитьАтрибут("PAYER_BANK_ACCOUNTNO", ВыбВыплатаЗПБ.Фирма.РС.БанкСчет);
    Ветка.УстановитьАтрибут("TOTAL_SHEDULE_AMOUNT", Строка(ВыбВыплатаЗПБ.Итог("Сумма")))// TOTAL_SHEDULE_AMOUNT - Общая сумма зарплатной ведомости в формате ГРН,КОП
 
    Ветка.УстановитьАтрибут("CONTRAGENT_CODEZKP", ВыбВыплатаЗПБ.Фирма.РС.Банк.ЕГРПОУ);
        
    ДанныеXML = XMLКорневойРаздел.СоздатьПодчиненныйЭлемент("EMPLOYEES");
    Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл             
        Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
        Ветка.УстановитьАтрибут("IDENTIFYCODE", ВыбВыплатаЗПБ.Сотрудник.ИНН)// Идентификационный код сотрудника
 
        Ветка.УстановитьАтрибут("TABNO", ВыбВыплатаЗПБ.Сотрудник.Код)// Табельный номер сотрудника 
 
        Ветка.УстановитьАтрибут("CARDACCOUNTNO", "");// ???? Номер карточного (или другого) счёта сотрудника.
 
        Ветка.УстановитьАтрибут("AMOUNT", ВыбВыплатаЗПБ.Сумма);//Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
 
    КонецЦикла;
    XMLКорневойРаздел.Записать(ИмяФайлаXML);
   Ёпрст
 
105 - 10.01.13 - 15:34
Ё...

 Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");

...............

Ветка2 = Ветка.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
        Ветка2.УстановитьАтрибут("IDENTIFYCODE
   Ёпрст
 
106 - 10.01.13 - 15:34
думай, кому чего создаешь..
   bananan
 
107 - 10.01.13 - 15:49
(105) Спасибо
(106) Постараюсь
   bananan
 
108 - 10.01.13 - 15:55
(105) Код такой:

    Ветка1 = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
    Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл             
        Ветка2 = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
           // Идентификационный код сотрудника
 
        Ветка2.УстановитьАтрибут("IDENTIFYCODE", ВыбВыплатаЗПБ.Сотрудник.ИНН);
            // Табельный номер сотрудника 
 
        Ветка2.УстановитьАтрибут("TABNO", ВыбВыплатаЗПБ.Сотрудник.Код);
            // Номер карточного (или другого) счёта сотрудника.
 
        Ветка2.УстановитьАтрибут("CARDACCOUNTNO", ВыбВыплатаЗПБ.Сотрудник.НомерСчета); 
            //Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
 
        Ветка2.УстановитьАтрибут("AMOUNT", ВыбВыплатаЗПБ.Сумма); 
    КонецЦикла;
Но на выходе все-равно не то
На выходе вот что:
<?xml version="1.0" encoding="windows-1251"?>
<DATAPACKET>
    <SCHEDULEINFO SHEDULE_DATE="2012-12-18" SHEDULE_NUMBER="АТ-0000156" PAYER_BANK_BRANCHID="333227   " 
    PAYER_BANK_ACCOUNTNO="260059008            " TOTAL_SHEDULE_AMOUNT="1239.02"/>
        <EMPLOYEES/>
            <EMPLOYEE IDENTIFYCODE="3376400724" TABNO="2156" CARDACCOUNTNO="                         " AMOUNT="1239.02"/>
</DATAPACKET>
Т.е. лажа с EMPLOYEES - он сначала должен "открыться"
потом в нему идут теги EMPLOYEE
А потом он должен закрыться: </EMPLOYEES>
   monsterZE
 
109 - 10.01.13 - 16:22
бананан, ты черепашку и пылесосик изучал?.. может с них надо было начать? ты вложенность не соблюдаешь.
   Ёпрст
 
110 - 10.01.13 - 16:23
да п..ц
ты вообще читаешь, что тебе пишут ?
 
 Рекламное место пустует
   monsterZE
 
111 - 10.01.13 - 16:23
так должно получиться?
<DATAPACKET>
<SCHEDULEINFO SHEDULE_DATE="1" SHEDULE_NUMBER="2" PAYER_BANK_BRANCHID="3" CONTRAGENT_CODEZKP="4">
<EMPLOYEES>
<EMPLOYEE IDENTIFYCODE="0" TABNO="1" CARDACCOUNTNO="2" AMOUNT="3"/>
</EMPLOYEES>
</SCHEDULEINFO>
</DATAPACKET>
   Ёпрст
 
112 - 10.01.13 - 16:23
Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("EMPLOYEES");
....
Пока ВыбВыплатаЗПБ.ПолучитьСтроку() = 1 Цикл             
        Ветка2 = !!!!!!!!!!!!!!ВЕТКА!!!!!!!!!!!!!!!!!! .СоздатьПодчиненныйЭлемент("EMPLOYEE");
   Ёпрст
 
113 - 10.01.13 - 16:24
так виднее ?
   monsterZE
 
114 - 10.01.13 - 16:25
он похож даже не пытается =)
--
    Ветка = ДанныеXML.СоздатьПодчиненныйЭлемент("SCHEDULEINFO");
    Ветка.УстановитьАтрибут("SHEDULE_DATE", "1");         
    Ветка.УстановитьАтрибут("SHEDULE_NUMBER", "2");
    Ветка.УстановитьАтрибут("PAYER_BANK_BRANCHID", "3");
 
    Ветка.УстановитьАтрибут("CONTRAGENT_CODEZKP", "4");
        
    Ветка2 = Ветка.СоздатьПодчиненныйЭлемент("EMPLOYEES");
    
        Ветка3 = Ветка2.СоздатьПодчиненныйЭлемент("EMPLOYEE");                      
        Ветка3.УстановитьАтрибут("IDENTIFYCODE", "0")// Идентификационный код сотрудника
 
 
        Ветка3.УстановитьАтрибут("TABNO", "1")// Табельный номер сотрудника 
 
 
        Ветка3.УстановитьАтрибут("CARDACCOUNTNO", "2");// ???? Номер карточного (или другого) счёта сотрудника.
 
 
        Ветка3.УстановитьАтрибут("AMOUNT", "3");//Сумма для зачисления на счёт сотрудника в формате ГРН,КОП
 
---
растут ветки =))
   bananan
 
115 - 10.01.13 - 16:27
(113)(114) Спасибо. Я кажется понял. Сейчас попробую
   monsterZE
 
116 - 10.01.13 - 16:28
первую ветку переименуй в ствол! =)) так правильней будет!
   Mikeware
 
117 - 10.01.13 - 16:30
в (115) он "кажется, понял"....
интересно, чем думал работодатель, нанимая такого "работничка"...
   oslokot
 
118 - 10.01.13 - 16:36
(9) да нормально работает, только что сделал обработку импорта накладных из сети аптек, все быстро. Правда xml-файлики маленькие, килобайт по сто...
   bananan
 
119 - 10.01.13 - 16:55
Ребята, а как можно на форму поставить поле для выбора файла?
   monsterZE
 
120 - 10.01.13 - 17:03
так же, как и с выбором документа..
тока тип строка
и в предопределенную процедуру вставляешь
Процедура ПриНачалеВыбораЗначения(ТекущийЭлемент,Флаг)
   // выбираем файл
 
    Если ТекущийЭлемент="ФайлCSV" Тогда
        Флаг = 0;
        СтрокаИмениФайла = ФайлCSV;               
        ИмяНачальногоКаталога = ФС.ТекКаталог();
        Если ФС.ВыбратьФайл(0, СтрокаИмениФайла, ИмяНачальногоКаталога, "Выбор файла с ГТД", "Все файлы (*.csv) |*.csv", "csv")=1 Тогда
            ФайлCSV = СтрокаИмениФайла;
            КаталогФайлаCSV = ИмяНачальногоКаталога;
        КонецЕсли;
    КонецЕсли;                             
КонецПроцедуры
   bananan
 
121 - 10.01.13 - 17:25
(120) Честно говоря ни понял. А какой елемент поставить на форму чтобы в нем можно было выбрать место на диске куда сохранить файл и задать имя файла?
   bananan
 
122 - 10.01.13 - 17:29
*(121) ВыбратьФайл()?
   monsterZE
 
123 - 10.01.13 - 17:41
хреново..
реквизит диалога, тип строка
зы. черепашка рулит - перо опусти, перо подними, сделай шаг =)
   bananan
 
124 - 10.01.13 - 17:46
(123) Опять ничего не понял:
поставил я на форму елемент с типом строка и чего - есть елемент для ввода значения,
а мне нужен елемент для выбора файла и его места на диске!
Пробывал так:
    Файл = ВыбратьФайл(1, ИмяФайлаXML, Каталог, "Зберегти в файл", "Файлы xml", "xml", 2);
выдает ошибку:
Файл = ВыбратьФайл<<?>>(1, ИмяФайлаXML, Каталог, "Зберегти в файл", "Файлы xml", "xml", 2);
{\\server12\vpktest$\ExtForms\ХМЛ новий.ert(7)}: Функция не обнаружена (ВыбратьФайл)
Это я что-то не так сделал или какие-то глюки в сети?
   Ёпрст
 
125 - 10.01.13 - 17:50
(124) ФС.
   monsterZE
 
126 - 10.01.13 - 17:51
ты видишь, что у меня написано?..
оно не похоже на то, что у тебя написано..
елемента для выбора файла нет =)
есть элемент строка с пидалькой
по нажатию которой можно заполнять этот элемент именем файла
   bananan
 
127 - 10.01.13 - 18:39
Всем большщое спасибо!!!
А как мне определить выбрал ли пользователь документ ЗарплатаЗПБ?
   bananan
 
128 - 10.01.13 - 19:06
*(127) Я сделал так:
Если СтрДлина(ВыбВыплатаЗПБ)=0 Тогда
        Возврат;
    КонецЕсли; 
И, таким обрзом, дальше код не выполняется
   monsterZE
 
129 - 10.01.13 - 20:38
вот тут http://www.mista.ru/tutor_1c/
есть отличный учебник.. только ты все равно его не прочитаешь.. =) может языковой барьер мешает?
   monsterZE
 
130 - 10.01.13 - 20:41
даже в СП выбрал методы документа и читай..
причем тут вобще строка и документ?

Выбран()
Синтаксис:
Выбран()
Назначение:
Определение факта позиционирования объекта типа документ.
Возвращает: 1 - если документ выбран; 0 - если не выбран.
   bananan
 
131 - 11.01.13 - 11:19
(130) Спасибо
А строка причем? так вот, если документ не выбран - длина строки равна 0!
   Ёпрст
 
132 - 11.01.13 - 11:23
(131) а если там будет битая ссылка - то обломишься с неявным преобразованием ссылочного типа к строке.
   Mikeware
 
133 - 11.01.13 - 11:25
(129) мешает не "языковой барьер", а "интеллектуальный уровень".
ну и, естественно, "закон соотношения радиусов"
 
 
   bananan
 
134 - 11.01.13 - 11:49
(133) Просто, ты, не равнодушен ко мне :)
   bananan
 
135 - 11.01.13 - 11:50
(132) Сделал уже как в (130) - правильно.
   Mikeware
 
136 - 11.01.13 - 11:50
(134) Пит мне передал завет - дятлов считать...
я заглянул в твои темы, и тебя засчитал...
   bananan
 
137 - 11.01.13 - 12:51
(136) Не скромничай; и себя не забудь посчитать...
  1  2

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует