Архив рубрики: 1С: Предприятие 8.х

Как в 1Cv8 (1С: Предприятие версий 8.x) быстро создать XDTO объект, если есть шаблон результирующего XML файла?

мое мнение, что если в шаблон нужно вносить мало изменений (например это файл ответа о результатах обмена), то нужно сделать так:


стрКодировка = "Windows-1251";
ШаблонОтветаXML   = ЭтотОбъект.ПолучитьМакет("ШаблонОтветаXML");
локИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ШаблонОтветаXML.Записать(локИмяВременногоФайла);

локЧтениеXML = Новый ЧтениеXML;
локЧтениеXML.ОткрытьФайл(локИмяВременногоФайла);
   
локФабрикаXDTO = Новый ФабрикаXDTO;
ОбXDTO = локФабрикаXDTO.ПрочитатьXML(локЧтениеXML);

шаблон можно сохранить в макетах обработки (или конфигурации) и читать через команды:


ШаблонОтветаXML   = ЭтотОбъект.ПолучитьМакет("ШаблонОтветаXML");
локИмяФайлаОтвета = ПолучитьИмяВременногоФайла("xml");
ШаблонОтветаXML.Записать(локИмяФайлаОтвета);

Как в 1Сv8 (1С: Предприятие версий 8.x) указать параметры XML файла, включая кодировку?


локЗаписьXML = Новый ЗаписьXML();
локЗаписьXML.ОткрытьФайл(ПолучитьИмяВременногоФайла(".xml"), "windows-1251");
//именно эта строка записывает
//<?xml version="1.0" encoding="windows-1251"?>
локЗаписьXML.ЗаписатьОбъявлениеXML();

кодировка указывается строкой


локЗаписьXML.ОткрытьФайл(ПолучитьИмяВременногоФайла(".xml"), "windows-1251");

объявление параметров XML файла записывается строкой


локЗаписьXML.ЗаписатьОбъявлениеXML();

как в 1Сv8 (1С: Предприятие версий 8.x) быстро записать объект XDTO фабрикиXDTO в файл XML?

чтобы записать объект нужно создать объект ЗаписьXML, открыть файл в который будешь писать и вызвать у фабрики XDTO метод ЗаписатьXML() с параметрами (указываю по порядку):

  • Объект ЗаписьXML который будет осуществлять запись
  • ОбъектXDTO который будет записан в файл
  • ИмяВетки-контейнера (обрамляющий тег)

локЧтениеXML.ОткрытьФайл(стрИмяФайла);
ОбXDTO = локФабрикаXDTO.ПрочитатьXML(локЧтениеXML);
//имея некоторый объект полученный от ФабрикиXDTO, например, как я указал выше, нужно сделать так:
локЗаписьXML = Новый ЗаписьXML();
локЗаписьXML.ОткрытьФайл(ПолучитьИмяВременногоФайла(".xml"), "windows-1251");
локЗаписьXML.ЗаписатьОбъявлениеXML();
локФабрикаXDTO.ЗаписатьXML(локЗаписьXML, ОбXDTO,"Файл");

1C8 важно, чтобы XSD схема была в кодировке UTF-8

я загружал XSD схему в кодировке windows-1251 в CериализаторXDTO

1С8 выдавала ошибку 

Ошибка при вызове метода контекста (СоздатьФабрикуXDTO)
локФабрикаИзXSD = СоздатьФабрикуXDTO(локИмяФайлаXSD_Ответа);
по причине:
Ошибка разбора XML: — [2,21] Фатальная ошибка:
Input is not proper UTF-8, indicate encoding !
Bytes: 0xD4 0xE0 0xE9 0xEB

Сохранил XSD файл в кодировке UTF-8  и все заработало.

также эту проблему можно устранить указав в начале XSD файла тег


<?xml version="1.0" encoding="windows-1251"?>