Работа со сложными типами в 1С

Категория: Учебники по 1С » Технологии интеграции 1С Предприятия 8.2

Рассмотрим пример использования объекта ЗаписатьХМL.

Если в качестве значения, помещаемого в XML, будет передано значение типа, который не может быть представлен в XML, то будет вызвано исключение.

 

Метод ПрочитатьХМL() предназначен для чтения значений из XML. Данный метод имеет один обязательный параметр - объект ЧтениеХМL, из которого должно быть прочитано значение. В качестве второго параметра может быть указан тип значения, которое должно быть прочитано из XML. Если тип значения явно указан в XML, то в качестве второго параметра может быть указано значение Неопределено, или же он может быть вообще опущен. В этом случае метод ПрочитатьХМL() пытается определить тип читаемого значения по содержимому атрибута xsi:type, а если атрибут xsi:type отсутствует, то по имени элемента. Если тип установить не удалось или значение указанного типа не может быть прочитано из XML, то вызывается исключение. При удачном завершении метод ПрочитатьХМLО возвращает считанное значение.

 

Следует обратить внимание на то, как считываются менеджеры значений констант, объекты базы данных и наборы записей. После успешного выполнения чтения метод ПрочитатьХМL() возвращает считанное из XML значение, но это значение еще не записано в базу данных. Если, например, считан элемент справочника, то для того чтобы считанный элемент справочника оказался записанным в базу данных, необходимо обратиться к его методу Записать(), как и при «обычной» записи измененного состояния объекта. Это же относится и к другим объектам базы данных, менеджерам записи констант и наборам записей.

 

При чтении объекта базы данных из XML в базе данных производится поиск объекта с таким же значением ссылки. Если такой объект найден, то считывание из XML выглядит так, как будто объект был прочитан из базы данных, после чего значения его реквизитов, табличных частей и т. п. перезаписываются полученными из XML значениями. Если же объект по ссылке не найден, то считывание из XML выглядит как создание нового объекта, установка ему значения ссылки и заполнение его содержимого значениями, прочитанными из XML.

 

Метод ВозможностьЧтенияХМL() определяет, возможно ли считывание значения из объекта ЧтениеХМL, находящегося в текущей позиции документа XML. Объект ЧтениеХМL передается данному методу в качестве параметра. Если метод возвращает Истина, то чтение возможно, если Ложь - значение не может быть считано.

Метод ПолучитьХМLТип() позволяет получить из объекта ЧтениеХМL тип данных XML, соответствующий текущей позиции документа XML. Данный метод также имеет один параметр - ЧтениеХМL.

 

Рассмотрим использование вышеперечисленных методов на примере. В контексте процедуры ЗаписьСложныхТиповДанных() существует переменная Документ (тип ДокументСсылка.<имя>) . Данный документ имеет следующую структуру:

•реквизит Контрагент, тип СправочникСсылка . Контрагенты;

•табличная часть Товары, реквизиты табличной части:

•Номенклатура, тип СправочникСсылка.Номенклатура;

•Количество, тип Число;

•Цена, тип Число;

•Сумма, тип Число.

Следует отметить, что метод ЗаписатьХМL() сам определяет структуру выгружаемого объекта. В данном случае она приводится для того, чтобы пояснить полученный XML-документ.

При записи и чтении сложных типов XML данных так же, передача XML-документа между клиентом и сервером происходит через временное хранилище.

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

В результате работы процедуры сформируется XML-документ следующего вида:

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

•ссылка на документ (Ref);

•пометка на удаление (DeletionMark) ;

•дата (Date);

•номер (Number);

•проведен (Posted).

Процедура чтения данных представлена тут:

Следует отметить, что если объект, в который производится загрузка, имеет отличную структуру (отличается состав реквизитов, табличных частей, реквизитов табличных частей или порядок их следования) от выгружаемого объекта, то метод ВозможностьЧтенияХМL() может возвратить значение Истина. При попытке проведения чтения объекта из XML-документа будет вызвано исключение. Это объясняется тем, что метод Возмож-ностьЧтенияХМL() анализирует текущее состояние объекта ЧтениеХМL.

 

В этот момент текущим является начало соответствующего элемента. Если имя элемента, атрибуты «понятны» методу, он и возвращает значение Истина . Проверка структуры, других моментов методом ВозможностьЧтенияХМL () не производится.

dle

Помоги проекту! Расскажи друзьям о сайте: