Как автоматически определить ОбъектXDTO или СписокXDTO мы парсим? Код 1C v 8.2 УП &НаСервере
Процедура ДляКаждогоИзСписокXDTO(СписокXDTO, Делегат)
Если ТипЗнч(СписокXDTO) = Тип("СписокXDTO") Тогда
Для Каждого Строка Из СписокXDTO Цикл
Выполнить(Делегат + "(Строка);");
КонецЦикла;
ИначеЕсли ТипЗнч(СписокXDTO) = Тип("ОбъектXDTO") Тогда
Выполнить(Делегат + "("СписокXDTO);");
КонецЕсли;
КонецПроцедуры
Данный код позволяет автоматически определять тип значения, который мы собираемся распарсить, и вызывает процедуру распознавания значения.
Подобный код может пригодиться при парсинге списков, дело в том, что когда в списке всего 1 элемент, то он имеет тип "ОбъектXDTO", а когда больше 1 элемента, то "СписокXDTO".
Применяется вот таким образом:
Код 1C v 8.2 УП // Контрагенты
ДляКаждогоИзСписокXDTO(ПолученныеДанные.Clients.Client, "ЗаписатьСтрокуКонтрагент");
где ПолученныеДанные.Clients.Client - это данные, которые надо распарсить, а ЗаписатьСтрокуКонтрагент - процедура следующего вида:
Код 1C v 8.2 УП &НаСервере
Процедура ЗаписатьСтрокуКонтрагент(Client)
СтрокаКонтрагент = ТаблицаКонтрагенты.Добавить();
СтрокаКонтрагент.НаименованиеПолное = ?(ТипЗнч(Client.name) = Тип("Строка"), Client.name, "");
СтрокаКонтрагент.ТелефонКонтрагента = ?(ТипЗнч(Client.phone) = Тип("Строка"), Client.phone, "");
КонецПроцедуры
Категория:
WEB-сервисы, WS-ссылки, XDTO-пакеты Открытие, перемещение и загрузка файла Пример обработки загрузки данных на управляемой форме, с определением необходимости передачи файла на сервер:
Код 1C v 8.2 УП &НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Фильтр = "*.xml|*.xml";
Если Диалог.Выбрать() Тогда
Объект.ИмяФайла = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗапуститьПриложение(Объект.ИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура Загрузить(Команда)
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
ws = НСтр(СтрокаСоединения, "ws");
ИмяСервера = НСтр(СтрокаСоединения, "Srvr");
Если ИмяСервера = "" Тогда
Если ws = "" Тогда
ПередачаФайлаНаСервер = Ложь;
Иначе
ПередачаФайлаНаСервер = Истина;
КонецЕсли;
Иначе
ПередачаФайлаНаСервер = (ИмяКомпьютера() <> ИмяСервера);
КонецЕсли;
Если ПередачаФайлаНаСервер Тогда
ПоместитьФайл(АдресХранилища, Объект.ИмяФайла,, Ложь, УникальныйИдентификатор);
КонецЕсли;
ЗагрузитьСервер();
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьСервер()
ЧтениеXML = Новый ЧтениеXML;
Если ПередачаФайлаНаСервер Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ЧтениеXML.ОткрытьФайл(ИмяВременногоФайла);
Иначе
ЧтениеXML.ОткрытьФайл(Объект.ИмяФайла);
КонецЕсли;
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();
/// Код загрузки
Сообщить("Загрузка завершена");
КонецПроцедуры
Категория:
Работа с Файлами и Каталогами