Работаем с XML используя ЧтениеXML и ЗаписьXML Примеры кода для Записи данных в XML файл и его последующего Чтения:
Код 1C v 8.3 &НаКлиенте
Функция ВывестиЭлем(ХМЛ,Знач Смещ) ;
Рез= 1 ;
Попытка
Пока ХМЛ. Прочитать( ) Цикл
ТипУзла= ХМЛ. ТипУзла;
Если ( ТипУзла= ТипУзлаXML. НачалоЭлемента) Тогда
Смещ= Смещ+ " " ;
Сообщить( Смещ+ "Элемент " + ХМЛ. Имя+ ":" , СтатусСообщения. Важное) ;
Пока ( ХМЛ. ПрочитатьАтрибут( ) ) Цикл
Сообщить( Смещ+ "Атрибут: " + ХМЛ. Имя+ ", значение: <" + ХМЛ. Значение+ ">" ) ;
КонецЦикла ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. КонецЭлемента) Тогда
Смещ= Лев( Смещ, СтрДлина( Смещ) - 4 ) ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. Текст) Тогда
Сообщить( Смещ+ "Текст элемента: <" + ХМЛ. Значение+ ">" ) ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. СекцияCDATA) Тогда
Сообщить( Смещ+ "CDATA: <" + ХМЛ. Значение+ ">" ) ;
ИначеЕсли ( ТипУзла= ТипУзлаXML. Комментарий) Тогда
Сообщить( Смещ+ "Комментарий: <" + ХМЛ. Значение+ ">" , СтатусСообщения. Информация) ;
Иначе
Сообщить( Смещ+ "Элемент " + ХМЛ. Имя+ ":" ) ;
Сообщить( Смещ+ "Тип: " + ХМЛ. Значение) ;
КонецЕсли ;
КонецЦикла ;
Исключение
Сообщить( ОписаниеОшибки( ) ) ;
Рез= 0 ;
КонецПопытки ;
Возврат Рез;
КонецФункции
&НаКлиенте
Процедура ВыгрузитьХМЛ(ИмяФайла) Экспорт
ХМЛ= Новый ЗаписьXML;
ХМЛ. ОткрытьФайл( ИмяФайла, Новый ПараметрыЗаписиXML( "windows-1251" , , Ложь , Ложь ) ) ;
ХМЛ. ЗаписатьОбъявлениеXML( ) ;
ХМЛ. ЗаписатьНачалоЭлемента( "Файл" ) ;
ХМЛ. ЗаписатьАтрибут( "Атрибут_Файл_1" , "Здесь содержимое Атрибут_Файл_1" ) ;
ХМЛ. ЗаписатьТекст( "Здесь содержимое Файл" ) ;
ХМЛ. ЗаписатьКомментарий( "Далее следует содержимое файла" ) ;
ХМЛ. ЗаписатьНачалоЭлемента( "СодержимоеФайла" ) ;
ХМЛ. ЗаписатьАтрибут( "Атрибут_СодержимоеФайла_1" , "Здесь содержимое Атрибут_СодержимоеФайла_1" ) ;
ХМЛ. ЗаписатьТекст( "Здесь содержимое СодержимоеФайла" ) ;
ХМЛ. ЗаписатьСекциюCDATA( "Это секция CDATA" ) ;
ХМЛ. ЗаписатьКонецЭлемента( ) ;
ХМЛ. ЗаписатьКонецЭлемента( ) ;
ХМЛ. Закрыть( ) ;
ХМЛ= Неопределено ;
ХМЛ= Новый ЧтениеXML;
ХМЛ. ОткрытьФайл( ИмяФайла, Новый ПараметрыЧтенияXML( , , , ТипПроверкиXML. НетПроверки) ) ;
ВывестиЭлем( ХМЛ, "" ) ;
ХМЛ. Закрыть( ) ;
ХМЛ= Неопределено ;
КонецПроцедуры
Категория:
JSON, XML, TXT, CSV, DBF Выгрузка картинок из базы 1С в XML В нынешнее время для электронного каталога или интернет-магазина необходимо выгружать не только информацию о цене и характеристиках товара, но и сопутствующие изображения. Хранящиеся в базе или связанные с номенклатурой изображения порой приходилось выгружать отдельно, подвергая предварительной обработке имена файлов, подгоняя их под правила связи товара с изображениями в приемнике. Тем не менее, в 1С существует возможность поместить двоичные данные изображений в виде строки в XML, либо другой файл выгрузки, чтобы уже на месте разобрать информацию о товаре.
Рассмотрим на примере следующей конфигурации.
Перечень объектов:
- справочники "Номенклатура", подчиненный ему справочник "Файлы";
- документ "Установка цен";
- обработка "Выгрузка прайса";
- перечисления "Типы файлов", "Типы номенклатуры";
- регистр "Цены номенклатуры".
Для начала, добавим форму элемента для справочника "Файлы"
Код 1C v 8.2 УП &НаСервере
Процедура ОбновитьКартинкуФорма(ХранилищеКартинки)
Если Объект. ТипФайла = Перечисления. ТипыФайлов. Картинка Тогда
Картинка = ПоместитьВоВременноеХранилище( ХранилищеКартинки. Получить( ) , УникальныйИдентификатор) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ПоместитьНаСервер(Данные = Неопределено)
ХранилищеКартинки = ? ( Данные = Неопределено , Неопределено , Новый ХранилищеЗначения( Данные) ) ;
ОбновитьКартинкуФорма( ХранилищеКартинки) ;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьФайл(Команда)
Режим = РежимДиалогаВыбораФайла. Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = "" ;
ДиалогОткрытияФайла. Фильтр = "Все *.*|*.*|.jpg|*.jpg|.png|*.png" ;
ДиалогОткрытияФайла. МножественныйВыбор = Ложь ;
ДиалогОткрытияФайла. Заголовок = "Выберите файл" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
мФайл = ДиалогОткрытияФайла. ПолноеИмяФайла;
ПоместитьНаСервер( Новый ДвоичныеДанные( мФайл) ) ;
Иначе
Текст = "Файл не выбран!" ;
Предупреждение( Текст) ;
КонецЕсли ;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ОбновитьКартинкуФорма( ТекущийОбъект. ХранилищеФайла) ;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект. ХранилищеФайла = ? ( ПустаяСтрока( Картинка) , Неопределено , Новый ХранилищеЗначения( ПолучитьИзВременногоХранилища( Картинка) ) ) ;
КонецПроцедуры
Настроим форму документа "Установка цен".
Код 1C v 8.2 УП &НаСервере
Процедура ЗаполнитьТЧ()
Результат = ВыгрузкаПрайса. ПолучитьТаблицуЦен( Объект. Дата) ;
Объект. Товары. Загрузить( Результат) ;
КонецПроцедуры
&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьТЧ( ) ;
КонецПроцедуры
Добавляем обработку выгрузки в XML.
Код 1C v 8.2 УП &НаКлиенте
Процедура Выгрузить(Команда)
Если ПустаяСтрока( ФайлВыгрузки) Тогда
Возврат ;
КонецЕсли ;
мСтрока = ВыгрузкаПрайса. ПолучитьДанныеXML( ) ;
мФайл = Новый ТекстовыйДокумент;
мФайл. УстановитьТекст( мСтрока) ;
мФайл. Записать( ФайлВыгрузки) ;
КонецПроцедуры
&НаКлиенте
Процедура ФайлВыгрузкиОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
Режим = РежимДиалогаВыбораФайла. Сохранение;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла( Режим) ;
ДиалогОткрытияФайла. ПолноеИмяФайла = ФайлВыгрузки;
Фильтр = "(*.xml)|*.xml" ;
ДиалогОткрытияФайла. Фильтр = Фильтр;
ДиалогОткрытияФайла. Заголовок = "Выберите файл" ;
Если ДиалогОткрытияФайла. Выбрать( ) Тогда
ФайлВыгрузки = ДиалогОткрытияФайла. ПолноеИмяФайла;
Иначе
Текст = "ru = "" Файл(ы) не выбран!"" ; en = "" File(s) not selected!"" " ;
Предупреждение( НСтр( Текст) ) ;
КонецЕсли ;
КонецПроцедуры
При заполнении табличной части "Товары" документа "Установка цен" и в обработке выгрузки мы обращаемся к общему модулю "Выгрузка прайса":
Код 1C v 8.2 УП Функция ПолучитьТаблицуЦен(ДатаЗапроса = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Номенклатура,
| ЕСТЬNULL(Цены.Цена, 0) КАК Цена,
| ПРЕДСТАВЛЕНИЕ(Номенклатура.Ссылка) КАК НоменклатураСтрока
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Товар,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
| ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних) КАК Цены
| ПО Номенклатура.Ссылка = Цены.Товар
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ" ;
Запрос. УстановитьПараметр( "Дата" , ? ( ЗначениеЗаполнено( ДатаЗапроса) , ДатаЗапроса, ТекущаяДата( ) ) ) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
Функция ПолучитьИзображения(НоменклатураСсылка)
Запрос = Новый Запрос;
Запрос. Текст =
"ВЫБРАТЬ
| Файлы.Ссылка
|ИЗ
| Справочник.Файлы КАК Файлы
|ГДЕ
| Файлы.Владелец = &Владелец
| И Файлы.ТипФайла = ЗНАЧЕНИЕ(Перечисление.ТипыФайлов.Картинка)
| И НЕ Файлы.ПометкаУдаления" ;
Запрос. УстановитьПараметр( "Владелец" , НоменклатураСсылка) ;
Возврат Запрос. Выполнить( ) . Выгрузить( ) ;
КонецФункции
Функция ПолучитьДанныеXML() Экспорт
ТЧ_Цены = ПолучитьТаблицуЦен( ) ;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML. УстановитьСтроку( ) ;
ЗаписьXML. ЗаписатьОбъявлениеXML( ) ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "price_list" ) ;
Для Каждого СтрокаЦен Из ТЧ_Цены Цикл
ЗаписьXML. ЗаписатьНачалоЭлемента( "tovar" ) ;
ЗаписьXML. ЗаписатьАтрибут( "name" , СтрокаЦен. НоменклатураСтрока) ;
ЗаписьXML. ЗаписатьАтрибут( "price" , Формат( СтрокаЦен. Цена, "ЧРД=.; ЧГ=0" ) ) ;
ТЧ = ПолучитьИзображения( СтрокаЦен. Номенклатура) ;
Если НЕ ТЧ. Количество( ) = 0 Тогда
ЗаписьXML. ЗаписатьНачалоЭлемента( "picture_list" ) ;
Для Каждого СтрТЧ Из ТЧ Цикл
мДанные = СтрТЧ. Ссылка. ХранилищеФайла. Получить( ) ;
Если НЕ ЗначениеЗаполнено( мДанные) Тогда
Продолжить;
КонецЕсли ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "picture" ) ;
ЗаписьXML. ЗаписатьАтрибут( "binary" , Base64Строка( мДанные) ) ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЕсли ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
СтрокаXML = ЗаписьXML. Закрыть( ) ;
Возврат СтрокаXML;
КонецФункции
Кодирование изображений выполняется с помощью функции Base64Строка , в качестве аргумента передаются двоичные данные из справочника "Файлы". Предполагается, что приемник XML может выполнить обратное преобразование. В 1С это можно сделать с помощью функции Base64Значение.
результат выгрузки прайса в XML:
Код Batch File (DOS, CMD, BAT) <?xml version="1 .0 "?>
<price_list>
<tovar name="Товар 1 " price="5 ">
<picture_list>
<picture binary="iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAB3RJTUUH3QINBSMt
F2PHEwAAABd0RVh0U29mdHdhcmUAR0xEUE5HIHZlciAzLjRxhaThAAAACHRwTkdH
TEQzAAAAAEqAKR8AAAAEZ0FNQQAAsY8L/GEFAAAABmJLR0QA/wD/AP+gvaeTAAAA
pklEQVR4nGP4jw3kajICEVYpBmRFcMafGkMgQhZB1wBRBDEYohquBy6F0AAXejM5
DoiQbUAWgehB2ACRg0jDEbIgRCUTAyponLY4XF8cjoBcNAUMaB44EiEBRJhsuJOY
8 rSY+oMNgDohJBCsvPiyZd0xIAIyICJwBUDF6E4iDEh1EnoowdXBVaOFElnBCvE3
cggCufAwgIQ1xMdQP5CcNMhJfMQnbwDR3npihwr9YwAAAABJRU5ErkJggg=="/>
</picture_list>
</tovar>
<tovar name="Товар 2 " price="10 "/>
<tovar name="Товар 3 " price="15 "/>
<tovar name="Товар 4 " price="18 ">
<picture_list>
<picture binary="iVBORw0KGgoAAAANSUhEUgAAAGUAAAAaCAYAAACuCJLbAAAABHNCSVQICAgIfAhk
iAAAAAlwSFlzAAADtgAAA7YBp8dLNgAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3Nj
YXBlLm9yZ5vuPBoAABQvSURBVGiB7Xp5cJ3HceevZ77rXXjv4QZIAjzFUxIpSqQo
0 ZIiS5apK1EiKYpke2OvdawrLttyNrXeql2K3qxd8WZXKW9i+YiPjeNLdJxDt2Qd
DGVCMi+JJ0iQBEFcxPXu975zpvcPABQIgtRWHFftbrmrpoBvpmemp3/TPT09j5gZ
lyai7dvvEzhyRMaGHCObduT4aFUi+z7dfkNAHmhsTqh80VNuuxdh1Sp13/3 bNd5H
6 XSx9m3bSKwubbIblWtr2Pa4GyWgrRRLEYcQZkha/FoW8v8RmSw0tA4Ng6tCB2XD
krUU+T4yGe+mrW/4 wNzKnxOUvY9ebU4kzFTgO9mC9luIZDJSlAoVMoo5BcEmmOjX
vqr/x0kS60hT5AguWVIUmLlCUlViljmaEEGuoRqW139jTzi73/mgENG3HlkfW2Q5
mVxI7R7k4mqkFmjFVhRpN1RBVYdUYRGFWuk5URaE9/OHlyQCnesviH6lsS5Fmvnc
pmLwr7TBNGPO/oYUxNowTZOThrQShkGOIApituhPSt2rlR7O6yD/8 Df3ujNd2nmg
vPKxtYkoHW/I+VgakLGk5kdZ3/cLbqTznq8qtSCoeF5Qq0UcqrD2f6wwIc4Haqay
5 SUULwRY/oogz0WKQVrPrcjJ9vdAmgkeAFyq32ySZpxsASsRt2Mpy0o6tkjaplVv
2 WY6LmXeMPWpxoTumRitTXzkb96pTvc7B8r2bWusbC3TOFI2V9TccE01Cslzw+GJ
anloPOeWJoqeNxaFqhaR9n2fCWBvlhB0EQXOdnSSSAMATYG1eH7aPDVQDIFfr3Vc
jGYrHgB4SvmK+byz82JHNM+yFgcAA2TbNsUNFg3SNJoyjt2USWaymWR70jLb4rbB
MYcPJql2dF4gxqZdmQEA2EYiXfxQckxV5gWRWlJRISq1sG94LN9/bKxSGixUwrIP
7 Xkeu5hUJLlzAnC+RQBqDoZzPI8+vCG97+1 B9/ab18TTWds6eHyw/PVv7i1NtxPA
BGgAuObyFnP3wZEL/O8Pv3ffwse/8 OKZs8NlPbe65hRSMObe8XPV0xx1GpAXss0a
KwYCPMQAchwnTJWqflvR85aHuragIRYwxxaSNJdaMl6aSCgP26iArawNAHh2aL0T
xrz6IJALa75Oh27UNzyW739nOJ/vm/CjvOdp9z0QZoMx83s2CAwAf/lnt7f/1 dd2
j95597L45g0dTZWyChYvysxb2JG+0 iBKgCCY4W/YtOCd5Ss6DvWfLXlf/MqrJQD4
93 +0 IVlnJ+RYoRj85y/etmTBvPRy0zJTzNB//pdv/NP8jobs337ngfSGLd/aN5eS
L6K42QDOBdD7KX22HmbyT/JO6cwFCK6HWAy65EN7UaiAFnTWC0uastMwzEVOTOW6
ipvcTYBL/MQT4uXii5l81ViZ19hYqXmlkdFC976Bwkj3SMUv5D1Vu1CI6f/1 RerP
fX/zK3e33XbLkttjlkxCEPcNFnaM52rFtpa6lrbmxAZJwgamXRxzuRodE0I4/QP5
d1pakwuSjtXsxIz5AMBEipglALDmIIr4NBmoM4Ronhjzdi7Z9Bc730fRACAu0T67
bua3mPV9KV66yDwUAyibdcSKlqS9rjPdOr++fqUds1NZS3WlMvLoHc4tRXr6idWW
Xcs0lvN0JWfmb0q2LyyETvpMzWeMvbvrI5hSdGbpFdtj8xaPAIBpGFpIiZG3f35D
dWzwTgLISKT2z7txy9OWlQqmJbAdW2VjUWJRx8RdptRxAGCmaGzEndj7wu5bSxOl
tljcDlddv+zIsnULhwVNroMI2PfqoSUjAxNNdsz0b77/uv006Vn4wJvHOgZODs9r
bs1OXH3bFT0A8MoP3rzGrYWRHUscW3LrJ78KADzWtfEX//D6raHrLgbJYqK+8 c0r
7 /3 k3wFA9wtPby6OD2+QJPx1f/CprwFAEAR08p+f3Vg+O3idbTtDmaWrukYO77v3
PLUzYEpZWnLXR79z4vkfPhgGfkuyfeGrjWuuPVLoO9ZeOLb/9 wBGrGn+m5FbbgrK
xRVWXeP++rWbd2k9eW6Nv/3 i76rAb3fSDe+2 LF9xkAtn20eP7Y03OWJ/hqsHGhnj
RmzIMXyJZCRE2kkmWBuWKwwnqo0OtEaVwm9Py1MbO3M4sWDpqGVZGkEgTz73v/6 a
Vdg5JSuCgrfeHxp63V68csixbQUA7fXV1sb66lVSIq6ZiIgAgrnjx6/9 YWGk2Eog
lCfKGP3xeKdXCV6/8 gMrT0+Nx3tePrhZay0BYOkVC/s7VswbJyG4e/eJNRPD+fax
vvHSNbevO/6 zJ5//8 NmB8fkA8IF7Noy1NhRadv7gRw/3 HT59+8 zzoTjcf+3 Or/2 X
j131wMMPWYl4xT+Ruw8A9v3o67zho3/0 lGEYnO858gSzrkMiuaPU2xMGpdzvzbIG
BKBIkPiumxv9GLNO1IbY4FUbuif27fgrrVUGRH7LNTd/f3DHM59hFXbqwFsshOgS
Ahj+xbMPBLnRfwsAtdBdJFav3U+JTCiEHQTaqwtNjgeWbYhs5MiAZFIppEtjQ2f7
Tx7p6+7 uHh4anTjh+cEOv1bl0PMQeX5kWlYIAH2v/mTrNCAkjAlhWCcBUkQCjm2r
sZ4DC4TQQpgSphG1EYEkgyiKDHN0ou32Dy4/3 dBcN7Zm07K9hikDAOj+Zc8qSDCg
sffnB5ZprSVo0vj3Pb/veiGFnhnFMVjs+buua6cBWXPt8t1XbF7Znzv+1 sdPHz59
BwMkhFDJbPK0YVrDIIB11Hzw77/7 vQ/+/m+NJLPJPgBw82N/AL9odr/y003Mug4A
L7/5 nq8QBGhSAGXFkzuFYfVOzy3kewGZIELvc3/z37RWGQC6cc3GTycaWovTlqUj
xSGzO7D7tSWlgVOfcMtF1Io5FEfOBvv27Rno2dd1wnOLxYCNdJnr6uoCWxrjdVUp
AicWkZEoj44O9Z7Njezsy+V6RouDrosHP7u+uR8A9faeHPz817cfTSQS9OjquuuE
lIBh/nN1zYc/nonFpF3qn18oV0q93/rSlzkKbj27++UzVz7xwNOCoIzTQ0tF4Kco
VA4ydWP1McO6+bpFZ8dGSg1i6oBsTpiW0Te8SFRq2Z6u4ytAgG0Zyg8iOTZSqpen
+i7Tixcen3anKtTW3l09qwnAwo768Vu2rOnlILR/+cL+jQSAhFAPfeF3flRXn/II
wv/Hp166uf/E0MrA9ebR8L5P/u6DG45+/2 uvdTCzsXf7d/7 ULVfaAcBwnAMNi5bl
B3bv5Cmle1c99JkvvPv3336wenbgU1prlAvVilcts4pCVEuFtRxGHUpFiIzY5/a8
e/qliefe1FfqvgBKwbCkWmu+dtn+rlf+AjPC5pB1uPv4sxNXL23mJU2pRq1VC4fa
Ga73pQEArIkRzQrIL0K3tFjLtFJCK4XBXO1L2596ajqEzQNQn13f3EQAvIqdkuqM
oomyMs6OmNDMDNSMEuIA1D/86 MCywZFqioggpOB7r08NGoNHUuVqQKeOdjtEhHtu
uazvH1/vXcwM2vXSrvZrH6TD7vCAUxopAUQWEcEyhbrngaV96Dk0T0sZDfWcyLhu
iIbmRCnbe2gBBhDqtoYzH7yjbdeTf/L2Sgbj4HOvtW6+ftHJdJ135MSh4dVj/aeu
B0/e2SrKfuTpz/+H7o3ct9lghmZWN9265eBjaxtHYpMWwp947LHTn1hm81RY0wEA
6 Zbkmcf+6 y3xznVP1gDQ5eubWIBAkuTrT+34 MhgOAy4DowLoBIA7tqzIjvfkwMwg
EEsxiZloLCUUseWZQlRYIm7b0okbLOKzwFBT0UTvhDs4XbekM/1 bT3/795 d99ctb
Wv/nl+9 sfvVnH1/7 +W888OL6D634+Wc/s3mH3T2w1syVWwE2MOmJSE3tlnWrGseW
d2ZypoEoCkP65k/2 r4QK+dlXe9rDwEcYeMjlC4ZQfhi4NezqOjHP7DmxNKoVTbdS
Qlgr61qpgMJETn7vJ291ciVvUnE8JlRNu5USckPjCVnNx2QhX2ee7Ft88IV9lwde
DaHnorM9lo9KRfOhDy16l7UKVBgKFYWkVdT9jT29h99++23 FES9gZghA97/7 +Eeu
uXHp9QBAgsTxrkc/Kw1pAoA0ZMAACiOVjr0vHdm456VHbgAAgcmoJfKiNX4taAHA
nmn8Gwb7U7rA7XdfsfHu+9 etS9THswbJsjIi16h4Soi0jshUZSJVNA0rmYxbySbD
lLbjzA4BAUAeKHpVZs4DQJCv/Ymz78SPr1He992dh3+xcGjkK4VfHL8p1312Xd+B
wVWi6jaKfHUe9Pkx/O5DI/UnzxTr7t+y7HRTNuYBQBAoCQDdpyfqgcmb8yu7znTU
fGUygHzJi5VHSw3Tg8TiZrhmWcMYABw9MdH4866+VjBj5eL6PADUvND66g/eWdnT
X0y+uvNUx4svHbuaAUhDqPaYqFHFYxovWxtWNh6YHvOGtS3P9f/3 m+46 +6 UPfKQh
Ke8EA/G6mO/kSwvNiJPTfILYmb5QLljefNRJ2kUA2PnTd+7 O9Y1f/Y3/cef8WMpO
Ta3DAIDLNix85Q+33 mElUk4aAOqb6lobsvbClo661U0tmTY7RuVEGJXQ1BQZ6XRJ
lQr1FSVQqgqxyLasVEPacVJFFcRi3sxLFgFAPA4jnXEeL5f872rN9Npb/R3TJoww
iv3sme4l+aLnDI2U0yuX1L8r5kgmP7+jt9PzlfHFnrcbp+sScSs4fCKXDoLJiOuK
y5rGTGMyHbPv6FgzM9MzO04vOJcSYOCBLcuO//lIJZEv+fFXdp3paG1O1G7buODY
vkOjyYoXpgdHKqm/3 n5w1cy5b7+u47AOlccVb4wZOD1QvAYAHFNWb1yajSPQNzy3
/+xVxWq0CAA608aw6DqeEqXKuY2lNAvGe5eyj/6 nD//g2//xnx7Rio2Xvt31+I2P
bN57esaNrXFe+sydD19/CMBVQpIBAKYpLCkoHXesxsa2VG5gpFJMxYJqqq2sxCrc
F0VOwWPJpZjJYcKwGxrqE9m2tLSyk9YybgjypJSlu1Y1xY9+4 YY/fvyjV336Uw9d
eaSh3nGFmMxV2ZaMYjEj6mxPlYnAne11JTBDaz1ZZiSNrr68ZTRmy5AIICLOph33
4 ftXHzvYM5q1TKma6mO1+29 b0vPbtyzpvedDy/ovW5jJW5ZUYxPVWCZle5YlVDZp
uexHxX9397KXE45RM6UInnnl1Lxoonzqj+9 e9sNFzfFjUtB0Wobjlizfe13Hc2vb
k3vCopeLFJPSTPlq2GAK4W9cmv0lM4gBysatshQUNWfsgXs2zHuLASTAVdMQgWMb
nvNW9+WppOWZpgibU6bRZJO15aGrnzctwyMBHHv5yFYnZecMS/jxjDPxsSfu/OnU
PqJkKl40LOGnsrEiR+wEXiT9ql8wRFh2AwTrh+9 SxAB1fW6TMxoFbZUgcVXJjxbl
q95Af6548nDvWG7Tokzy0zd1PqZZh6YhkkYylrXrYvNB526s76Wc50oSnU8X5MtI
iAv6qKo/oqr+uIyZWRG360mQpf2ooP2wqGt+yWpOr2TFgSrVBlQY1cDMUHxBnm3G
pAQAJIUkKSwdRO5FBWKQZn1hHmuK0W7NLIw0ahSFEMk4aQFQ3BGs2fY6Gnu0bfms
eMZwU3MDYDCIIZi15FDHAk9nB4+MjA0dGX/dYn/PPJuGNj3Z5cknmLHgrQF9JjwA
JU1olhmCqHeEoISF4NFr2+5 yTNFg1sXbCcRky4S0ZJKmc780fZuYLDyjzNQ2vffn
/MJMzExaM6kwrEZVfzSq+SUQDJYko5pf1JVgJHKDIphJhdrlUFU5jGrKD6usWDNP
XfcvUibzmiBmZhUqxVNzThfNLHi6TPFOynbB2kRU8YqIlIpc31UVNwxztbJF3KYK
Vc/OlTvt0XwHImUaXphQMdN1hic6IUQk3CBueGFceEEcGrb2oobxs7Xy2KniQcOv
7 XdSleGbk3dV8frrfC51f2Tb/VZ/4 VRDzo1d5mlxRdWNDDf0Ru9dHrvNdgzbjFtJ
JsCwjbh0rMzFduUMAC7aQGAGnXfYMADU+if2AwCZ0iCCJAipo8iDvjDbPMVnc6j8
S8kyF73fo9bMNPzcT3nniwEBISzT0X7kClPadkNyoZDCApEAAZFjF2UUOay0TUrb
kSbzrE+Hx0bdY0NDlRfmpYPusUQtd9/WQwEw85GLiLo+t8kZ88OGCscWR5FYmomp
FcszWOUYZEhDQlpS2pl4q5CCiMCzbV9P2r5iAgkSc197mFlrDqBZaaUCDiLPSDjZ
yA8qQa42zFMC0ZSlkSCAL8jq/ko0nYf6l9DFUv4gJjCxMKUNzVpY0tJKKxAZ0rZS
RszKMsGMmNRgLjg4OBF11WrhO3GXe5sy0cSmJ7u86ddH473ZmF/ets1fP/RMrjUe
hAXYxZKnC6eLRmibaEmmZF2dYaSFIkhoYgYiNygySJgxM0XECN2oypqVNA2HBLMw
yJxjWVwbr+UjL/RIkDDjZlxP1PIcKqW1SDGfvzfpPTj+NR6/pnLR/yJM3qfTVLM/
JXAYAYDQGqgV3bFKWO1Tpq0DjfHhQrArYYlTdeSOaFOXNj2517voczAAEBE9/cRq
c7HrxAZ9M+PVzNYAlDKESNgOWhMGtYFgCQKiUGs9JYMQk4ehNISQBhlgYjUVcpGE
kNIQREDoh4EOzz+UiZg0n/8 +/38 bXcrlMTNrAHKGS6bJI4wZOiiH6GfNOc2yJiks
J8xotC2u8qdinnv/E4dDngXCRX9ihG3bxBt4w4rlXCvPpi0UOSXFSZcoboJNkvI3
v2a5BEUApFLMQgRQ2o1Lv5KJxV0n9AK3PhbchJsCbN06p1u+OChTtG3bNnEj3hDu
xICcKCSMRaYnjGSGyrHoN6C8D6Vcg6NKgXtDRzdkqlGsYb7agZv01ouAMU3/G2jy
rVebJ+JFAAAAAElFTkSuQmCC"/>
</picture_list>
</tovar>
<tovar name="Услуга 1 " price="32 "/>
<tovar name="Услуга 2 " price="15 "/>
</price_list>
Источник
Категория:
JSON, XML, TXT, CSV, DBF Как выгрузить Таблицу Значений в XML Код 1C v 8.х Функция ВыгрузитьТЗ_в_XML(пТЗ,пФайлИмя)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML. ОткрытьФайл( пФайлИмя) ;
ЗаписьXML. ЗаписатьОбъявлениеXML( ) ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "Root" ) ;
Для А= 0 По пТЗ. Количество( ) - 1 Цикл
ЗаписьXML. ЗаписатьНачалоЭлемента( "item" ) ;
Для Каждого Колонка Из пТЗ. Колонки Цикл
ИмяАтрибута= Колонка. Имя;
ЗначениеАтрибута= пТЗ[А][Колонка. Имя];
ЗаписьXML. ЗаписатьАтрибут( ИмяАтрибута, Строка( ЗначениеАтрибута) ) ;
КонецЦикла ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
ЗаписьXML. Закрыть( ) ;
КонецФункции
Категория:
Работа с Таблицей Значений Сохранение реквизитов и табличных частей объектов в XML Сохранение производится процедурой СохранитьРеквизитыИТабличныеЧасти. В качестве параметров она принимает сохраняемый объект и имя файла. Ссылочные реквизиты сохраняются в виде GUID.
Код 1C v 8.х Процедура СохранитьРеквизитыИТабличныеЧасти (Объект, ИмяФайлаXML=Неопределено) Экспорт
ФайлXML = Новый ЗаписьXML;
ФайлXML. ОткрытьФайл( ИмяФайлаXML) ;
ФайлXML. ЗаписатьОбъявлениеXML( ) ;
ФайлXML. ЗаписатьНачалоЭлемента( "Root" ) ;
ФайлXML. ЗаписатьАтрибут( "Объект" , Объект. Метаданные( ) . Имя) ;
Для Каждого Реквизит Из Объект. Метаданные( ) . Реквизиты Цикл
ФайлXML. ЗаписатьНачалоЭлемента( "Реквизит" ) ;
ФайлXML. ЗаписатьАтрибут( "Имя" , Реквизит. Имя) ;
ТипЗначения = ТипЗнч( Объект[Реквизит. Имя]) ;
Если Не ТипЗначения = Тип( "Неопределено" ) Тогда
ФайлXML. ЗаписатьАтрибут( "ИмяТипа" , XMLТип( ТипЗначения) . ИмяТипа) ;
ФайлXML. ЗаписатьАтрибут( "URI" , XMLТип( ТипЗначения) . URIПространстваИмен) ;
КонецЕсли ;
ФайлXML. ЗаписатьТекст( XMLСтрока( Объект[Реквизит. Имя]) ) ;
ФайлXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
Для Каждого ТЧ из Объект. Метаданные( ) . ТабличныеЧасти Цикл
ФайлXML. ЗаписатьНачалоЭлемента( "ТабличнаяЧасть" ) ;
ФайлXML. ЗаписатьАтрибут( "Имя" , ТЧ. Имя) ;
Для Каждого СтрокаТЧ из Объект[ТЧ. Имя] Цикл
ФайлXML. ЗаписатьНачалоЭлемента( "ЭлементКоллекции" ) ;
Для Каждого РеквизитТЧ Из ТЧ. Реквизиты Цикл
ФайлXML. ЗаписатьНачалоЭлемента( "Реквизит" ) ;
ФайлXML. ЗаписатьАтрибут( "Имя" , РеквизитТЧ. Имя) ;
ТипЗначения = ТипЗнч( СтрокаТЧ[РеквизитТЧ. Имя]) ;
Если Не ТипЗначения = Тип( "Неопределено" ) Тогда
ФайлXML. ЗаписатьАтрибут( "ИмяТипа" , XMLТип( ТипЗначения) . ИмяТипа) ;
ФайлXML. ЗаписатьАтрибут( "URI" , XMLТип( ТипЗначения) . URIПространстваИмен) ;
КонецЕсли ;
ФайлXML. ЗаписатьТекст( XMLСтрока( СтрокаТЧ[РеквизитТЧ. Имя]) ) ;
ФайлXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ФайлXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ФайлXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
Если Не ФайлXML= Null Тогда
ФайлXML. ЗаписатьКонецЭлемента( ) ;
ФайлXML. Закрыть( ) ;
КонецЕсли ;
КонецПроцедуры
За чтение объекта отвечают процедуры ЗагрузитьРеквизитыИТабличныеЧасти и ЗагрузитьОбъектРекурсивно. Чтобы прочитать объект вызывается первая, ей передаются объект, который необходимо заполнить, и имя файла. Вторая является вспомогательной.
Код 1C v 8.х Процедура ЗагрузитьРеквизитыИТабличныеЧасти(Объект, ИмяФайлаXML=Неопределено) Экспорт
Если Не ИмяФайлаXML = Неопределено Тогда
ФайлXML = Новый ЧтениеXML;
ФайлXML. ОткрытьФайл( ИмяФайлаXML) ;
Пока ФайлXML. Прочитать( ) Цикл
Если ФайлXML. ТипУзла = ТипУзлаXML. НачалоЭлемента Тогда
ЗагрузитьОбъектРекурсивно( ФайлXML, Объект, ФайлXML. Имя) ;
КонецЕсли
КонецЦикла ;
КонецЕсли ;
КонецПроцедуры
Процедура ЗагрузитьОбъектРекурсивно(ФайлXML, Объект, знач ИмяУзла)
ИмяТипа = "" ;
ПространствоИмен = "" ;
Пока ФайлXML. ПрочитатьАтрибут( ) Цикл
Если ФайлXML. Имя = "ИмяТипа" Тогда
ИмяТипа = ФайлXML. Значение;
ИначеЕсли ФайлXML. Имя = "URI" Тогда
ПространствоИмен = ФайлXML. Значение;
КонецЕсли ;
КонецЦикла ;
Пока ФайлXML. Прочитать( ) Цикл
Если ФайлXML. ТипУзла = ТипУзлаXML. КонецЭлемента И ФайлXML. Имя = ИмяУзла Тогда
Возврат ;
ИначеЕсли ФайлXML. ТипУзла = ТипУзлаXML. Текст Тогда
ТипОбъекта = ИзXMLТипа( ИмяТипа, ПространствоИмен) ;
Если НЕ ТипОбъекта = Неопределено тогда
Объект = XMLЗначение( ТипОбъекта, ФайлXML. Значение) ;
КонецЕсли ;
ИначеЕсли ФайлXML. ТипУзла = ТипУзлаXML. НачалоЭлемента Тогда
ИмяТекУзла = ФайлXML. Имя;
Если ФайлXML. Имя = "ЭлементКоллекции" Тогда
ЗагрузитьОбъектРекурсивно( ФайлXML, Объект. Добавить( ) , ИмяТекУзла) ;
Иначе
Если ФайлXML. ПрочитатьАтрибут( ) Тогда
ЗагрузитьОбъектРекурсивно( ФайлXML, Объект[ФайлXML. Значение], ИмяТекУзла) ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
КонецПроцедуры
В приложенном файле -
Скачивать файлы может только зарегистрированный пользователь! - демонстрационная обработка, позволяющая сохранить ссылочный объект БД в файл и заполнить объект из файла. Заполняемый объект должен быть того же типа, что и сохраненный, а также он должен быть предварительно создан, сохранен в ИБ и выбран в поле "Ссылка".
Категория:
Документы Создание XML файла выгрузки Работников организации с Группировкой по Подразделению Нужен XML файл выгрузки данных вида(выделю как код 8-рки, т.к. выделение xlm кода нет):
Код 1C v 8.х < ? xml version= "1.0" encoding= "UTF-8" ? >
< orgstructure>
< department dep_id= "7ebb913c-e9c6-11dc-a4f2-0017311416a1" dep_name= "генеральный директор" dep_code= "П100" >
< orgposition user_id= "ba68bb79-c377-11dc-a4ca-0017311416a1" user_position_id= "ba68bb78-c377-11dc-a4ca-0017311416a1" user_position= "генеральный директор" user_is_active= "1" / >
< / department>
< department dep_id= "8132fe4a-0789-11dd-887b-001d60f0496c" dep_name= "Бухгалтерия" dep_code= "П200" >
< orgposition user_id= "21448456-15b0-11dd-80a1-00145e3710ab" user_position_id= "3c948267-df80-11dc-a4e8-0017311416a1" user_position= "специалист" user_is_active= "0" / >
< orgposition user_id= "d299614a-df9d-11dc-a4e8-0017311416a1" user_position_id= "53082fda-edf4-11dd-af3e-00145e3710ab" user_position= "заместитель главного бухгалтера" user_is_active= "1" / >
< orgposition user_id= "8132fe6c-0789-11dd-887b-001d60f0496c" user_position_id= "d299614d-df9d-11dc-a4e8-0017311416a1" user_position= "секретарь" user_is_active= "1" / >
< orgposition user_id= "2e81c20e-f190-11dc-a4fb-0017311416a1" user_position_id= "2e81c20d-f190-11dc-a4fb-0017311416a1" user_position= "бухгалтер" user_is_active= "0" / >
< orgposition user_id= "ba68bb7e-c377-11dc-a4ca-0017311416a1" user_position_id= "53082fd9-edf4-11dd-af3e-00145e3710ab" user_position= "главный бухгалтер" user_is_active= "1" / >
< orgposition user_id= "9893f85a-0403-11df-a872-00215aa545b4" user_position_id= "53073825-e5e6-11dc-a4ef-0017311416a1" user_position= "делопроизводитель" user_is_active= "1" / >
< / department>
< department dep_id= "6bb91f72-e077-11dd-bf56-00145e3710ab" dep_name= "Отдел Продаж" dep_code= "П300" >
< department dep_id= "6bb91f73-e077-11dd-bf56-00145e3710ab" dep_name= "Клиентский сервис" dep_code= "П310" >
< orgposition user_id= "02ad5122-e231-11dd-bf56-00145e3710ab" user_position_id= "6bb91f6c-e077-11dd-bf56-00145e3710ab" user_position= "Специалист" user_is_active= "1" / >
< / department>
< department dep_id= "6bb91f74-e077-11dd-bf56-00145e3710ab" dep_name= "Менеджеры" dep_code= "П320" >
< orgposition user_id= "02584921-с235-11dd-bf56-00145e3710ab" user_position_id= "7bb98f6c-e577-11dd-bf56-00145e3710ab" user_position= "Менеджер" user_is_active= "1" / >
< / department>
< / department>
< / orgstructure>
Вот код:
Код 1C v 8.х Процедура ОбойтиУровеньДерева(Строки, Запись)
Для каждого Строка из Строки Цикл
Если ПустаяСтрока( Строка( Строка. Сотрудник) ) Тогда
Запись. ЗаписатьНачалоЭлемента( "department" ) ;
Запись. ЗаписатьАтрибут( "dep_id" , Строка( Строка. ПодразделениеОрганизации. УникальныйИдентификатор( ) ) ) ;
Запись. ЗаписатьАтрибут( "dep_name" , Строка( Строка. ПодразделениеОрганизации) ) ;
Запись. ЗаписатьАтрибут( "dep_code" , СокрЛП( Строка( Строка. ПодразделениеОрганизации. Код) ) ) ;
ОбойтиУровеньДерева( Строка. Строки, Запись) ;
Запись. ЗаписатьКонецЭлемента( ) ;
Иначе
Запись. ЗаписатьНачалоЭлемента( "orgposition" ) ;
Запись. ЗаписатьАтрибут( "user_id" , Строка( Строка. Сотрудник. УникальныйИдентификатор( ) ) ) ;
Запись. ЗаписатьАтрибут( "user_position_id" , Строка( Строка. Должность. УникальныйИдентификатор( ) ) ) ;
Запись. ЗаписатьАтрибут( "user_position" , Строка( Строка. Должность) ) ;
Запись. ЗаписатьАтрибут( "user_is_active" , ? ( Строка. ПричинаИзмененияСостояния = Перечисления. ПричиныИзмененияСостояния. Увольнение, "0" , "1" ) ) ;
ОбойтиУровеньДерева( Строка. Строки, Запись) ;
Запись. ЗаписатьКонецЭлемента( ) ;
КонецЕсли
КонецЦикла ;
КонецПроцедуры
Процедура КнопкаВыгрузитьНажатие(Кнопка)
ПутьКФайлу = "D:\Vigruzka_" + Формат( ТекущаяДата( ) , "ДФ=YYYYMMdd" ) + ".xml" ;
Запись = Новый ЗаписьXML;
Запись. ОткрытьФайл( ПутьКФайлу, "UTF-8" ) ;
Запись. ЗаписатьОбъявлениеXML( ) ;
Запись. ЗаписатьНачалоЭлемента( "orgstructure" ) ;
Запрос = Новый Запрос;
Запрос. Текст= "
|ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник,
| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| РаботникиОрганизацийСрезПоследних.Должность,
| РаботникиОрганизацийСрезПоследних.Период,
| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Порядок КАК ПодразделениеОрганизацииПорядок,
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&dateper, ) КАК РаботникиОрганизацийСрезПоследних
|
|УПОРЯДОЧИТЬ ПО
| ПодразделениеОрганизацииПорядок
|ИТОГИ ПО
| ПодразделениеОрганизации ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ
|" ;
Запрос. УстановитьПараметр( "dateper" , ТекущаяДата( ) ) ;
Результат = Запрос. Выполнить( ) ;
Дерево = Результат. Выгрузить( ОбходРезультатаЗапроса. ПоГруппировкамСИерархией) ;
ОбойтиУровеньДерева( Дерево. Строки, Запись) ;
Запись. ЗаписатьКонецЭлемента( ) ;
Запись. Закрыть( ) ;
КонецПроцедуры
Категория:
JSON, XML, TXT, CSV, DBF Как из одной базы перенести документ в другую базу через XML файл? Нужно документ РеализацияТоваровУслуг (ссылка на который выбирается в диалоге создаваемой обработки) перенести в другую базу данных. Структура конфигураций идентична. Справочники (и другие сопутствующие объекты) синхронизированы по значениям внутренних идентификаторов.
Для выгрузки потребуется выполнить следующий фрагмент кода:
Код 1C v 8.х
ЗаписьXML = Новый ЗаписьXML( ) ;
ЗаписьXML. ОткрытьФайл( "c:\doc.xml" ) ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "Root" ) ;
ВыгружаемыйОбъект = Документ. ПолучитьОбъект( ) ;
ЗаписатьXML( ЗаписьXML, ВыгружаемыйОбъект) ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
ЗаписьXML. Закрыть( ) ;
При выгрузке создаем элемент Root исходя из соображений, что в XML-документе должен быть только один корневой узел, а в общем случае (но не в нашем) выгружаться может не один объект.
Для загрузки выгруженного значения используем следующий фрагмент кода:
Код 1C v 8.х ЧтениеXML = Новый ЧтениеXML( ) ;
ЧтениеXML. ОткрытьФайл( "c:\doc.xml" ) ;
ЧтениеXML. Прочитать( ) ;
ЧтениеXML. Прочитать( ) ;
Если ВозможностьЧтенияXML( ЧтениеXML) Тогда
ЗагружаемыйОбъект = ПрочитатьXML( ЧтениеXML) ;
ЗагружаемыйОбъект. Записать( ) ;
КонецЕсли ;
ЧтениеXML. Закрыть( ) ;
Категория:
JSON, XML, TXT, CSV, DBF Как организовать обмен данными между произвольными конфигурациями? Код 1C v 8.х Процедура Выгрузка(Элемент)
Путь = "c:\" ;
ЗаписьXML = Новый ЗаписьXML( ) ;
ЗаписьXML. ОткрытьФайл( Путь + "выгрузка.xml" ) ;
Узел = ПланыОбмена. Поставка. НайтиПоКоду( "Маг1" ) ;
ЗапСообщения = ПланыОбмена. СоздатьЗаписьСообщения( ) ;
ЗапСообщения. НачатьЗапись( ЗаписьXML, Узел) ;
Выборка = ПланыОбмена. ВыбратьИзменения( Узел, ЗапСообщения. НомерСообщения) ;
Пока Выборка. Следующий( ) Цикл
Данные = Выборка. Получить( ) ;
Если ТипЗнч( Данные) = Тип( "ДокументОбъект.РеализацияТоваров" ) Тогда
ВыгрузкаРеализации( ЗаписьXML, Данные) ;
Иначе
ЗаписатьXML( ЗаписьXML, Данные) ;
КонецЕсли ;
КонецЦикла ;
ЗапСообщения. ЗакончитьЗапись( ) ;
ЗаписьXML. Закрыть( ) ;
КонецПроцедуры
Процедура ВыгрузкаРеализации(ЗаписьXML, Документ)
ЗаписьXML. ЗаписатьНачалоЭлемента( "DocumentObject.ПередачаТовара" ) ;
ЗаписатьXML( ЗаписьXML, Документ. Ссылка. УникальныйИдентификатор( ) , "Ref" , НазначениеТипаXML. Явное) ;
ЗаписатьXML( ЗаписьXML, Документ. ПометкаУдаления, "DeletionMark" , НазначениеТипаXML. Явное) ;
ЗаписатьXML( ЗаписьXML, Документ. ВалютаДокумента, "ВалютаДокумента" , НазначениеТипаXML. Явное) ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "Товары" ) ;
Для Каждого ТекСтрока Из Документ. Товары Цикл
ЗаписьXML. ЗаписатьНачалоЭлемента( "Row" ) ;
ЗаписатьXML( ЗаписьXML, ТекСтрока. Номенклатура, "Номенклатура" , НазначениеТипаXML. Явное) ;
ЗаписатьXML( ЗаписьXML, ТекСтрока. Количество, "Количество" , НазначениеТипаXML. Явное) ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
КонецПроцедуры
Процедура Загрузка(Элемент)
Путь = "c:\" ;
ЧтениеXML = Новый ЧтениеXML( ) ;
ЧтениеXML. ОткрытьФайл( Путь + "выгрузка.xml" ) ;
ЧтСообщения = ПланыОбмена. СоздатьЧтениеСообщения( ) ;
ЧтСообщения. НачатьЧтение( ЧтениеXML) ;
ПланыОбмена. УдалитьРегистрациюИзменений( ЧтСообщения. Отправитель, ЧтСообщения. НомерСообщения) ;
Пока ВозможностьЧтенияДанных( ЧтениеXML) Цикл
Данные = ПрочитатьДанные( ЧтениеXML) ;
Если РазрешениеКоллизий( Данные) Тогда
Данные. ОбменДанными. Отправитель = ЧтСообщения. Отправитель;
Данные. ОбменДанными. Загрузка = Истина ;
Данные. Записать( ) ;
КонецЕсли ;
КонецЦикла ;
ЧтСообщения. ЗакончитьЧтение( ) ;
ЧтениеXML. Закрыть( ) ;
КонецПроцедуры
Функция ВозможностьЧтенияДанных(ЧтениеXML)
ТипXML = ПолучитьXMLТип( ЧтениеXML) ;
Если ТипXML = Неопределено Тогда
Возврат Ложь ;
КонецЕсли ;
Если ТипXML. ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML. URIПространстваИмен = "" Тогда
Возврат Истина ;
КонецЕсли ;
Возврат ВозможностьЧтенияXML( ЧтениеXML) ;
КонецФункции
Функция ПрочитатьДанные(ЧтениеXML)
ТипXML = ПолучитьXMLТип( ЧтениеXML) ;
Если ТипXML. ИмяТипа = "DocumentObject.ПередачаТовара" И ТипXML. URIПространстваИмен = "" Тогда
Возврат ЧтениеРеализации( ЧтениеXML) ;
КонецЕсли ;
Возврат ПрочитатьXML( ЧтениеXML) ;
КонецФункции
Функция ЧтениеРеализации(ЧтениеXML)
ЧтениеXML. Прочитать( ) ;
ПолученнаяСсылка = ПрочитатьXML( ЧтениеXML) ;
Док = Документы. ПоступлениеТоваров. ПолучитьСсылку( Новый УникальныйИдентификатор( ПолученнаяСсылка) ) ;
Документ = Док. ПолучитьОбъект( ) ;
Если Документ = Неопределено Тогда
Документ = Документы. ПоступлениеТоваров. СоздатьДокумент( ) ;
Документ. УстановитьСсылкуНового( Док) ;
Документ. Дата = ТекущаяДата;
Документ. УстановитьНовыйНомер( ) ;
КонецЕсли ;
Документ. ПометкаУдаления = ПрочитатьXML( ЧтениеXML) ;
Документ. ВалютаДокумента = ПрочитатьXML( ЧтениеXML) ;
ЧтениеXML. Прочитать( ) ;
Документ. Товары. Очистить( ) ;
Пока ЧтениеXML. Имя = "Row" Цикл
ЧтениеXML. Прочитать( ) ;
НоваяСтрока = Документ. Товары. Добавить( ) ;
НоваяСтрока. Номенклатура = ПрочитатьXML( ЧтениеXML) ;
НоваяСтрока. Количество = ПрочитатьXML( ЧтениеXML) ;
ЧтениеXML. Прочитать( ) ;
КонецЦикла ;
ЧтениеXML. Прочитать( ) ;
ЧтениеXML. Прочитать( ) ;
Возврат ( Документ) ;
КонецФункции
Функция РазрешениеКоллизий(Данные)
Если ТипЗнч( Данные) = Тип( "ДокументОбъект.ПоступлениеТоваров" ) Тогда
Если Не Данные. ЭтоНовый( ) Тогда
СсылкаНаУзел = ПланыОбмена. Поставка. НайтиПоКоду( "Опт" ) ;
Если ПланыОбмена. ИзменениеЗарегистрировано( СсылкаНаУзел, Данные) Тогда
Возврат ( Ложь ) ;
КонецЕсли ;
КонецЕсли ;
КонецЕсли ;
Возврат ( Истина ) ;
КонецФункции
Категория:
Конвертация данных, Обмен, Перенос Выгрузка / Загрузка данных посредством XML файлов? В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных –
ЗаписьXML и
ЧтениеXML .
Запись данных справочника в XML-файл:
Код 1C v 8.х Запись = Новый ЗаписьXML;
Запись. ОткрытьФайл( ПутьКФайлу) ;
Запись. ЗаписатьОбъявлениеXML( ) ;
Запись. ЗаписатьНачалоЭлемента( "Клиенты" ) ;
Выборка = Справочники. Клиенты. Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Запись. ЗаписатьНачалоЭлемента( "Клиент" ) ;
Запись. ЗаписатьАтрибут( "Код" , Строка( Выборка. Код) ) ;
Запись. ЗаписатьТекст( Выборка. Наименование) ;
Запись. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
Запись. ЗаписатьКонецЭлемента( ) ;
Запись. Закрыть( ) ;
Чтение данных из XML-файла в справочник:
Код 1C v 8.х Чтение = Новый ЧтениеXML;
Чтение. ОткрытьФайл( ПутьКФайлу) ;
Спр= "" ;
Пока Чтение. Прочитать( ) Цикл
Если Чтение. ТипУзла = ТипУзлаXML. НачалоЭлемента Тогда
Если Чтение. Имя= "Клиент" Тогда
Спр = Справочники. Клиенты. СоздатьЭлемент( ) ;
Пока Чтение. ПрочитатьАтрибут( ) Цикл
Если Чтение. Имя= "Код" Тогда
Спр. Код = Число( Чтение. Значение) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
ИначеЕсли Чтение. ТипУзла = ТипУзлаXML. Текст Тогда
Спр. Наименование = Чтение. Значение;
ИначеЕсли Чтение. ТипУзла = ТипУзлаXML. КонецЭлемента Тогда
Спр. Записать( ) ;
КонецЕсли ;
КонецЦикла ;
Создадим обработку в типовой конфигурации для экспорта плана счетов. Структура xml-файла должна быть такой. Корневой элемент xml-документа соответствует плану счетов в целом. В нем располагаются подчиненные элементы с именем Счет, содержащие информацию о счетах. В качестве содержимого элементов указывается наименование счета. Остальные данные записываются в качестве атрибутов (код, признаки валютного, количественного учета и пр.). В качестве подчиненных элементов для элемента Счет задаются элементы, обозначающие его субсчета с теми же атрибутами. Приведем код процедуры экспорта плана счетов.
Код 1C v 7.x Процедура Выполнить()
Если ЗагрузитьВнешнююКомпоненту( КаталогПрограммы( ) + "v7plus.dll" ) < > 1 Тогда
Предупреждение( "Компонента не обнаружена" ) ;
Возврат ;
КонецЕсли ;
Анализатор= СоздатьОбъект( "AddIn.XMLParser" ) ;
Корень= Анализатор. СоздатьДокумент( ) ;
План= Корень. СоздатьПодчиненныйЭлемент( "ПланСчетов" ) ;
Счет= СоздатьОбъект( "Счет.Основной" ) ;
Родитель= СоздатьОбъект( "Счет.Основной" ) ;
Счет. ВыбратьСчета( ) ;
Пока Счет. ПолучитьСчет( ) = 1 Цикл
Если Счет. Уровень( ) = 1 Тогда
Родитель. НайтиПоКоду( Счет. Код) ;
СчетXML= План. СоздатьПодчиненныйЭлемент( "Счет" ) ;
СчетXML. УстановитьАтрибут( "Код" , Счет. Код) ;
СчетXML. УстановитьАтрибут( "Валютный" , Счет. Валютный) ;
СчетXML. УстановитьАтрибут( "Количественный" , Счет. Количественный) ;
СчетXML. УстановитьАтрибут( "Забалансовый" , Счет. Забалансовый) ;
Если Счет. Активный= 1 Тогда
СчетXML. УстановитьАтрибут( "вид" , "активный" ) ;
ИначеЕсли Счет. Активный= 2 Тогда
СчетXML. УстановитьАтрибут( "вид" , "пассивный" ) ;
Иначе
СчетXML. УстановитьАтрибут( "вид" , "активно-пассивный" ) ;
КонецЕсли ;
СчетXML. Значение= Счет. Наименование;
Иначе
Если Счет. ПринадлежитГруппе( Родитель) = 1 Тогда
СубсчетXML= СчетXML. СоздатьПодчиненныйЭлемент( "Субсчет" ) ;
СубсчетXML. УстановитьАтрибут( "Код" , Счет. Код) ;
СубсчетXML. Значение= Счет. Наименование;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
Корень. Записать( КаталогПрограммы( ) + "plan.xml" ) ;
КонецПроцедуры
В результате будет получен файл, вот его фрагмент:
Код
<?xml version="1.0" encoding="windows-12Sl" ?> - <ПланСчетов>
<Счет Код="00" Валютный="0" Количественный="0" Забалансовый="0" вид="активно-пассивный">Вспомогательный</Счет>
- <Счет Код="01" Валютный="0" Количественный="0" Забалансовый="0" вид="активный">
Основные средства
<Субсчет Код="01.1" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">ОС в организации</Субсчет> <Субсчет Код="01.2" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">Выбытие ОС</Субсчет> </Счет>
- <Счет Код="02" Валютный="0" Количественный="0" Забалансовый="0" вид="пассивный">
Амортизация ОС
А теперь приведем код для импорта плана счетов из xml-файла в новую конфигурацию. Код модуля соответствующей обработки должен содержать процедуру Выполнить(), которая имеет такой вид.
Код 1C v 7.x Процедура Выполнить()
Если ЗагрузитьВнешнююКомпоненту( КаталогПрограммы( ) + "v7plus.dll" ) < > 1 Тогда
Предупреждение( "Внешняя компонента не найдена" ) ;
Возврат ;
КонецЕсли ;
Анализатор= СоздатьОбъект( "AddIn.XMLParser" ) ;
Файл= Анализатор. СоздатьДокумент( ) ;
Файл. Загрузить( КаталогПрограммы( ) + "plan.xml" ) ;
План= Файл. ВыбратьУзел( "ПланСчетов" ) ;
кол= План. КоличествоПодчиненных( ) ;
Счет= СоздатьОбъект( "Счет.Основной" ) ;
Для инд= 1 по кол Цикл
СчетXML= План. ПолучитьПодчиненныйПоНомеру( инд) ;
КолСубсчетов= СчетXML. КоличествоПодчиненных( ) ;
Если КолСубсчетов> 1 Тогда
Счет. Новый( 1 ) ;
Иначе
Счет. Новый( 0 ) ;
КонецЕсли ;
Счет. Код= СчетXML. ПолучитьАтрибут( "Код" ) ;
Счет. Наименование= СчетXML. Значение;
Счет. Валютный= СчетXML. ПолучитьАтрибут( "Валютный" ) ;
Счет. Количественный= СчетXML. ПолучитьАтрибут( "Количественный" ) ;
Счет. Забалансовый= СчетXML. ПолучитьАтрибут( "Забалансовый" ) ;
Если СчетXML. ПолучитьАтрибут( "вид" ) = "активный" Тогда
Счет. Активный= 1 ;
ИначеЕсли СчетXML. ПолучитьАтрибут( "вид" ) = "пассивный" Тогда
Счет. Активный= 2 ;
Иначе
Счет. Активный= 3 ;
КонецЕсли ;
Счет. Записать( ) ;
Если КолСубсчетов> 1 Тогда
Счет1 = СоздатьОбъект( "Счет.Основной" ) ;
Для инд1 = 2 По кол_субсчетов Цикл
Субсчет= СчетXML. ПолучитьПодчиненныйПоНомеру( инд1 ) ;
Счет1 . Новый( 0 ) ;
Счет1 . Код= Субсчет. ПолучитьАтрибут( "Код" ) ;
Счет1 . Записать( ) ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Категория:
JSON, XML, TXT, CSV, DBF Пример выгрузки списка документов в XML файл Код 1C v 8.х Процедура ДействияФормыВыгрузить(Кнопка)
Запись= Новый ЗаписьXML;
Запись. ОткрытьФайл( "c:\document.xml" ) ;
Запись. ЗаписатьОбъявлениеXML( ) ;
Запись. ЗаписатьНачалоЭлемента( "Корневой" ) ;
Запись. ЗаписатьАтрибут( "Доумент" , "ПринятиеКУчтетуОС" ) ;
Запись. ЗаписатьКомментарий( "Краткая информация о принятых к учету ОС" ) ;
Выборка= Документы. ПринятиеКУчетуОС. Выбрать( НачДата, КонДата) ;
Пока Выборка. Следующий( ) Цикл
Запись. ЗаписатьНачалоЭлемента( "Элемент" ) ;
Запись. ЗаписатьАтрибут( "Номер" , Строка( Выборка. Номер) ) ;
Запись. ЗаписатьАтрибут( "Дата" , Строка( Выборка. Дата) ) ;
Запись. ЗаписатьАтрибут( "Организация" , Строка( Выборка. Организация) ) ;
Запись. ЗаписатьАтрибут( "Склад" , Строка( Выборка. Склад) ) ;
Запись. ЗаписатьАтрибут( "ПодразделениеОрганизации" , Строка( Выборка. ПодразделениеОрганизации) ) ;
Запись. ЗаписатьАтрибут( "МОЛ" , Строка( Выборка. МОЛБУ) ) ;
Запись. ЗаписатьАтрибут( "Оборудование" , Строка( Выборка. Номенклатура) ) ;
Запись. ЗаписатьАтрибут( "ОбъектСтроительства" , Строка( Выборка. ОбъектСтроительства) ) ;
Запись. ЗаписатьАтрибут( "ПервоначальнаяСтоимость" , Строка( Выборка. ПервоначальнаяСтоимостьНУ) ) ;
Запись. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
Запись. ЗаписатьКонецЭлемента( ) ;
Запись. Закрыть( ) ;
КонецПроцедуры
Категория:
JSON, XML, TXT, CSV, DBF Как сформировать XML-документ в строку? Требуется, чтобы запись XML-документа производилась не в файл, а в строку
Код 1C v 8.х Запись = Новый ЗаписьXML( ) ;
Запись. УстановитьСтроку( ) ;
Запись. ЗаписатьОбъявлениеXML( ) ;
Запись. ЗаписатьНачалоЭлемента( "Корневой" ) ;
Запись. ЗаписатьАтрибут( "Справочник" , "Номенклатура" ) ;
Запись. ЗаписатьКомментарий( "Краткая информация о номенклатуре" ) ;
Выборка = Справочники. Номенклатура. ВыбратьИерархически( ) ;
Пока Выборка. Следующий( ) Цикл
Если Выборка. ЭтоГруппа Тогда
Продолжить;
КонецЕсли ;
Запись. ЗаписатьНачалоЭлемента( "Элемент" ) ;
Запись. ЗаписатьАтрибут( "Код" , Строка( Выборка. Код) ) ;
Запись. ЗаписатьАтрибут( "Артикул" , Строка( Выборка. Артикул) ) ;
Запись. ЗаписатьТекст( Выборка. Наименование) ;
Запись. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
Запись. ЗаписатьКонецЭлемента( ) ;
Стр = Запись. Закрыть( ) ;
Сообщить( Стр) ;
Для вывода XML-документа в строку после создания объекта ЗаписьXML необходимо использовать метод УстановитьСтроку(). Только в этом случае метод Закрыть() вернет строку, которая будет содержать сформированный XML-документ.
еще примеры:
Код 1C v 8.х
Функция ОбъектВXML(ДокументОбъект) Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML. УстановитьСтроку( ) ;
ЗаписатьXML( ЗаписьXML, ДокументОбъект) ;
Возврат ЗаписьXML. Закрыть( ) ;
КонецФункции
Функция ОбъектИзXML(Стр) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML. УстановитьСтроку( Стр) ;
Возврат ПрочитатьXML( ЧтениеXML) ;
КонецФункции
Категория:
JSON, XML, TXT, CSV, DBF Как можно сформировать XML-документ произвольной структуры? Используется модель последовательного доступа (работа осуществляется только с одним текущим узлом):
Код 1C v 8.х Запись = Новый ЗаписьXML;
Запись. ОткрытьФайл( ПутьКФайлу) ;
Запись. ЗаписатьОбъявлениеXML( ) ;
Запись. ЗаписатьНачалоЭлемента( "Корневой" ) ;
Запись. ЗаписатьАтрибут( "Справочник" , "Номенклатура" ) ;
Запись. ЗаписатьКомментарий( "Краткая информация о номенклатуре" ) ;
Выборка = Справочники. Номенклатура. ВыбратьИерархически( ) ;
Пока Выборка. Следующий( ) Цикл
Если Выборка. ЭтоГруппа Тогда
Продолжить;
КонецЕсли ;
Запись. ЗаписатьНачалоЭлемента( "Элемент" ) ;
Запись. ЗаписатьАтрибут( "Код" , Строка( Выборка. Код) ) ;
Запись. ЗаписатьАтрибут( "Артикул" , Строка( Выборка. Артикул) ) ;
Запись. ЗаписатьТекст( Выборка. Наименование) ;
Запись. ЗаписатьКонецЭлемента( ) ;
КонецЦикла ;
Запись. ЗаписатьКонецЭлемента( ) ;
Запись. Закрыть( ) ;
В результате будет получен файл вида
Код <НачалоЭлемента
ИмяАтрибута = Значение ИмяАтрибута = Значение......>
Текст
<КонецЭлемента>
Создание XML-документа с помощью объекта ЗаписьXML производится путем помещения в строгой последовательности (иначе будет нарушена структура) «частей» узлов.
Категория:
JSON, XML, TXT, CSV, DBF Как организовать обмен данными между одинаковыми, идеинтичными конфигурациями? Нужно документ РеализацияТоваровУслуг (ссылка на который выбирается в диалоге создаваемой обработки) перенести в другую базу данных. Структура конфигураций идентична. Справочники (и другие сопутствующие объекты) синхронизированы по значениям внутренних идентификаторов.
Для выгрузки потребуется выполнить следующий фрагмент кода:
Код 1C v 8.х
ЗаписьXML = Новый ЗаписьXML( ) ;
ЗаписьXML. ОткрытьФайл( "c:\doc.xml" ) ;
ЗаписьXML. ЗаписатьНачалоЭлемента( "Root" ) ;
ВыгружаемыйОбъект = Документ. ПолучитьОбъект( ) ;
ЗаписатьXML( ЗаписьXML, ВыгружаемыйОбъект) ;
ЗаписьXML. ЗаписатьКонецЭлемента( ) ;
ЗаписьXML. Закрыть( ) ;
При выгрузке создаем элемент Root исходя из соображений, что в XML-документе должен быть только один корневой узел, а в общем случае (но не в нашем) выгружаться может не один объект.
Для загрузки выгруженного значения используем следующий фрагмент кода:
Код 1C v 8.х ЧтениеXML = Новый ЧтениеXML( ) ;
ЧтениеXML. ОткрытьФайл( "c:\doc.xml" ) ;
ЧтениеXML. Прочитать( ) ;
ЧтениеXML. Прочитать( ) ;
Если ВозможностьЧтенияXML( ЧтениеXML) Тогда
ЗагружаемыйОбъект = ПрочитатьXML( ЧтениеXML) ;
ЗагружаемыйОбъект. Записать( ) ;
КонецЕсли ;
ЧтениеXML. Закрыть( ) ;
Категория:
Конвертация данных, Обмен, Перенос