09.09.16 — 05:58
Привет.
Создаю пакет обмена. Через ЗаписатьXML (глобальную) пишу в него СправочникОбъект.Кошелек В Объекте есть владелец СправочникСсылка.Пользователь. В другой базе, куда летит пакет (через wsПрокси) тоже есть Справочник.Кошелек, но независимый.
Вопрос.
Почему когда я пытаюсь прочитать этот объект в базе-получателе конструкцией wsПрокси.ФабрикаXDTO.ПрочитатьXDTO, то у меня происходит ругань вида: «ошибка отображения пространства имен отсутствует отображение для префикса: »», а когда пишу в базе-источнике в XML вот так: ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ОбъектДанных);
ФабрикаXDTO.ЗаписатьXML(ОбъектЗапись, ОбъектXDTO,,,,НазначениеТипаXML.Явное);, то всё ОК?
nickroblogger_
4 — 15.09.16 — 06:04
(3) Глобальный контекст (Global context)
ЗаписатьXML (WriteXML)
Вариант синтаксиса: Записать без имени
Синтаксис:
ЗаписатьXML(<ЗаписьXML>, <Значение>, <НазначениеТипа>)
Параметры:
<ЗаписьXML> (обязательный)
Тип: ЗаписьXML.
Объект, через который осуществляется запись XML.
<Значение> (обязательный)
Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.
<НазначениеТипа> (необязательный)
Тип: НазначениеТипаXML.
Определяет необходимость назначения типа элементу XML.
Значение по умолчанию: Неявное.
Описание варианта метода:
В качестве имени элемента будет использован тип значения.
Вариант синтаксиса: Записать с полным именем
Синтаксис:
ЗаписатьXML(<ЗаписьXML>, <Значение>, <ПолноеИмя>, <НазначениеТипа>)
Параметры:
<ЗаписьXML> (обязательный)
Тип: ЗаписьXML.
Объект, через который осуществляется запись XML.
<Значение> (обязательный)
Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.
<ПолноеИмя> (обязательный)
Тип: Строка.
Полное имя элемента XML, в который будет записано значение.
<НазначениеТипа> (необязательный)
Тип: НазначениеТипаXML.
Определяет необходимость назначения типа элементу XML.
Значение по умолчанию: Неявное.
Описание варианта метода:
Выполняет запись значения с указанием полного имени элемента.
Вариант синтаксиса: Записать с локальным именем и пространством имен
Синтаксис:
ЗаписатьXML(<ЗаписьXML>, <Значение>, <ЛокальноеИмя>, <URIПространстваИмен>, <НазначениеТипа>)
Параметры:
<ЗаписьXML> (обязательный)
Тип: ЗаписьXML.
Объект, через который осуществляется запись XML.
<Значение> (обязательный)
Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.
<ЛокальноеИмя> (обязательный)
Тип: Строка.
Локальное имя элемента XML, в который будет записано значение.
<URIПространстваИмен> (обязательный)
Тип: Строка.
URI пространства имен, к которому принадлежит указанное ЛокальноеИмя.
<НазначениеТипа> (необязательный)
Тип: НазначениеТипаXML.
Определяет необходимость назначения типа элементу XML.
Значение по умолчанию: Неявное.
Описание варианта метода:
Выполняет запись значения с указанием локального имени элемента и пространства имен, к которому принадлежит локальное имя.
Описание:
Выполняет сериализацию значения в формат XML.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:
Значения не всех типов могут быть записаны в формате XML данным методом.
В XML могут быть записаны значения следующих типов: Неопределено, Null, Булево, Число, Строка, Дата, Тип, УникальныйИдентификатор, ДвоичныеДанные, ХранилищеЗначения, ОписаниеТипов, а также ссылки объектов данных и сами объекты данных, наборы записей регистров, менеджер значения константы. В дальнейшем список может пополняться.
При попытке записи значения неподходящего типа будет вызвано исключение.
Тамика Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
||||
1 |
||||
Отсутствует отображение для типа ‘ДанныеФормыЭлементКоллекции’29.08.2017, 12:09. Показов 19695. Ответов 7 Метки нет (Все метки)
Что это за штука-то такая?
Может кто сталкивался? Буду благодарна за помощь Добавлено через 3 минуты
0 |
3053 / 2000 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
29.08.2017, 12:10 |
2 |
Не по теме:
Добавлено через 3 минуты Молодец) И быстро) А что было-то?)
0 |
Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
|
29.08.2017, 12:12 [ТС] |
3 |
А что было-то?) У меня тут была такая забавная строка в серверной процедуре: Если допилить Объект.Работы[0].ПолучитьИдентификатор() — то уже другая ошибка.
0 |
GreenkA 3053 / 2000 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||||||
29.08.2017, 12:38 |
4 |
|||||||
Тамика,
Добавлено через 10 минут
Добавлено через 25 секунд
0 |
Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
|
29.08.2017, 12:39 [ТС] |
5 |
GreenkA, не, я имела в виду под «другой ошибкой» — ошибка, которая уже не касается этого.
0 |
GreenkA |
29.08.2017, 12:40
|
Не по теме:
ошибка, которая уже не касается этого. аа) ну ладно) будет новая тема?:D
0 |
Котовчанин 942 / 482 / 200 Регистрация: 16.02.2010 Сообщений: 3,338 Записей в блоге: 37 |
|
29.08.2017, 12:41 [ТС] |
7 |
аа) ну ладно) будет новая тема? Сейчас чуток покопаюсь и создам, если ничего не выйдет
0 |
3053 / 2000 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
29.08.2017, 12:42 |
8 |
Сейчас чуток покопаюсь и создам как показывает практика — выжди минимум 3 минуты) велика вероятность, что ты сама все решишь
0 |
Подскажите как с этим боротся — ошибка вот такого плана в толстом клиенте все нормально, а надо вызывать на тонком:{Документ.ГрафикПроизводства.Команда.ОтправитьВОптимизацию.МодульКоманды(32)}: Ошибка при вызове метода контекста (СервСформировать2)
Результат = СервСформировать2(ДокументыДляОптимизации,КолВГруппе);
по причине:
Ошибка при вызове серверного метода.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’
2 метода на клиенте и на сервере, вот сам код:
&НаКлиенте
Процедура ВыполнитьОптимизацию(ДокументыДляОптимизации)
РежимРаботы = Вопрос("Группировать по пакетам?",РежимДиалогаВопрос.ДаНетОтмена,,КодВозвратаДиалога.Нет);
Группировать = Ложь;
Если РежимРаботы = КодВозвратаДиалога.Отмена Тогда
Возврат
КонецЕсли;
Если РежимРаботы = КодВозвратаДиалога.Да Тогда
КолВГруппе = 60;
ВвестиЧисло(КолВГруппе,"Количество Изделий в группировке",3,0);
Группировать = Истина;
Иначе
КолВГруппе = 0;
КонецЕсли;
РаботаСОптимизацией.ОбработатьДокументы(ДокументыДляОптимизации, КолВГруппе, Группировать);
Предупреждение("Оптимизация выполнена", 5);
Результат = СервСформировать2(ДокументыДляОптимизации,КолВГруппе);
Если Вопрос("Проставить КИС в график?", РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Да Тогда
ГрафикПроизв(ДокументыДляОптимизации);
ФормаОбр = ПолучитьФорму("Обработка.КИСВГрафиках.Форма.Форма");
Если Результат.Количество() Тогда
Для Каждого Строка Из Результат[0] Цикл
Если КолВГруппе = 0 Тогда
НоваяСтрока = ФормаОбр.Объект.ТабличнаяЧастьСоответствие.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,Строка);
Иначе
Расчет = Окр(Строка.Количество / КолВГруппе);
Для п =0 По Расчет+2 Цикл
Если п <> 0 и п <> 1 Тогда
НоваяСтрока = ФормаОбр.Объект.ТабличнаяЧастьСоответствие.Добавить();
Строка.Количество = Строка.Количество / п;
ЗаполнитьЗначенияСвойств(НоваяСтрока,Строка);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Значение =0;
//Значение2 =0;
Для п =0 По ФормаОбр.Объект.ТабличнаяЧастьСоответствие.Количество()-1 Цикл
Отбор = Новый Структура;
Отбор.Вставить("ИмяФайла",ФормаОбр.Объект.ТабличнаяЧастьСоответствие[п].ИмяФайла);
// Отбор.Вставить("Материал",ФормаОбр.Объект.ТабличнаяЧастьСоответствие[п].Материал);
НадСтроки = ФормаОбр.Объект.ТабличнаяЧастьСоответствие.НайтиСтроки(Отбор);
КонецЦикла;
Для п = 0 По НадСтроки.Количество()-1 Цикл
Значение = Значение + НадСтроки[п].Количество;
КонецЦикла;
НоваяСтрока = ФормаОбр.Объект.ТабличнаяЧастьСоответствие.Добавить();
//Строка.КоличествоФакт = Строка[3] - Значение2 ;
Строка.Количество = Строка[3] - Значение ;
ЗаполнитьЗначенияСвойств(НоваяСтрока,Строка);
КонецЦикла;
Иначе
Вопрос("В выбранных нарядах отсутствуют материалы." , РежимДиалогаВопрос.ОК);
Возврат
КонецЕсли;
ФормаОбр.Объект.ОснованиеГрафикПроизводства = ДокументыДляОптимизации;
ФормаОбр.Объект.КИСПроставлен = ДокументыДляОптимизации[0].КИСПроставлен;
ФормаОбр.ОткрытьМодально();
КонецЕсли;
КонецПроцедуры // ВыполнитьОптимизацию()
&НаСервере
Функция СервСформировать2(ПараметрКоманды, КолВГруппе =0) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГрафикПроИзводстваНаряды.Документ,
| ГрафикПроИзводстваНаряды.Группировка КАК Группировка
|ИЗ
| Документ.ГрафикПроизводства.Наряды КАК ГрафикПроИзводстваНаряды
|ГДЕ
| ГрафикПроИзводстваНаряды.Ссылка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Группировка,
| ГрафикПроИзводстваНаряды.НомерСтроки";
МассОпераций = Новый Массив;
МассОпераций.Добавить("Раскрой");
МассОпераций.Добавить("Пленка");
Запрос.УстановитьПараметр("Операции", МассОпераций);
Запрос.УстановитьПараметр("Ссылка", ПараметрКоманды[0].Ссылка);
Результат = Запрос.Выполнить().Выгрузить();
//РаскройТаблицаДанных = Новый ТаблицаЗначений;
//ПленкаТаблицаДанных = Новый ТаблицаЗначений;
РаскройТаблицаДанных = Неопределено;
ПленкаТаблицаДанных = Неопределено;
Для Каждого Строка Из Результат Цикл
РаскройТаблицаДанныхИтоговая = Строка.Документ.Запасы.Выгрузить();
РаскройТаблицаДанныхИтоговая.Колонки["Номенклатура"].Имя = "Материал";
РаскройТаблицаДанныхИтоговая.Колонки["НомерСтроки"].Имя = "Номер";
РаскройТаблицаДанныхИтоговая.Колонки["КоличествоРасчетное"].Имя = "КоличествоФакт";
РаскройТаблицаДанныхИтоговая.Свернуть("КИС, Количество, КоличествоФакт, ПланыРаскроя, Номер, Материал");
РаскройТаблицаДанныхИтоговая.Колонки.Добавить("Группировка");
РаскройТаблицаДанныхИтоговая.Колонки.Добавить("НарядВПроизводство");
РаскройТаблицаДанныхИтоговая.Колонки.Добавить("ИмяФайла");
РаскройТаблицаДанныхИтоговая.Колонки.Добавить("НомерФайла");
// РаскройТаблицаДанныхИтоговая.Колонки.Добавить("ПланыРаскроя");
РаскройТаблицаДанныхИтоговая.ЗаполнитьЗначения(Строка.Группировка,"Группировка");
РаскройТаблицаДанныхИтоговая.ЗаполнитьЗначения(Строка.Документ.Ссылка,"НарядВПроизводство");
РаскройТаблицаДанныхИтоговая.ЗаполнитьЗначения(Строка.Документ.Номер,"ИмяФайла");
РаскройТаблицаДанныхИтоговая.ЗаполнитьЗначения(Строка.Документ.Запасы[0].ПланыРаскроя,"ПланыРаскроя");
Если РаскройТаблицаДанных = Неопределено Тогда
РаскройТаблицаДанных = РаскройТаблицаДанныхИтоговая.Скопировать();
ИначеЕсли КолВГруппе = 0 Тогда
Для Каждого СтрокаТД Из РаскройТаблицаДанныхИтоговая Цикл
НоваяСтрока = РаскройТаблицаДанных.Добавить();
// СтрокаТД.Количество= 60;
Для ТекКолонка = 0 по РаскройТаблицаДанных.Колонки.Количество()-1 Цикл
НоваяСтрока[ТекКолонка] = СтрокаТД[ТекКолонка];
КонецЦикла;
КонецЦикла;
Иначе
Для Каждого СтрокаТД Из РаскройТаблицаДанныхИтоговая Цикл
НоваяСтрока = РаскройТаблицаДанных.Добавить();
// СтрокаТД.Количество= 60;
Для ТекКолонка = 0 по РаскройТаблицаДанных.Колонки.Количество()-1 Цикл
НоваяСтрока[ТекКолонка] = СтрокаТД[ТекКолонка];
КонецЦикла;
КонецЦикла;
КонецЕсли;
//
//ИначеЕсли Строка(Строка.Документ.Операция) = "Пленка" Тогда
// Если ПленкаТаблицаДанных = Неопределено Тогда
//
// Иначе
//
// КонецЕсли;
//КонецЕсли;
КонецЦикла;
РезультатРаскроев = новый Массив;
Если РаскройТаблицаДанных = Неопределено Тогда
РаскройТаблицаДанных = Неопределено;
Иначе
РаскройТаблицаДанных.Колонки.Добавить("Порядок");
Счетчик = 0;
ПоследнийНомер = "";
Для Каждого Строка Из РаскройТаблицаДанных Цикл
Если ПоследнийНомер <> Строка.Номер Тогда
ПоследнийНомер = Строка.Номер;
Счетчик = Счетчик + 1;
КонецЕсли;
Строка.Порядок = Счетчик;
КонецЦикла;
//Результат = РаскройТаблицаДанных[0].Количество/10;
РезультатРаскроев.Добавить(РаскройТаблицаДанных);
КонецЕсли;
Если ПленкаТаблицаДанных = Неопределено Тогда
Иначе
ПленкаТаблицаДанных.Колонки.Добавить("Порядок");
Счетчик = 0;
ПоследнийНомер = "";
Для Каждого Строка Из ПленкаТаблицаДанных Цикл
Если ПоследнийНомер <> Строка.Номер Тогда
ПоследнийНомер = Строка.Номер;
Счетчик = Счетчик + 1;
КонецЕсли;
Строка.Порядок = Счетчик;
КонецЦикла;
КонецЕсли;
// АдресХранилища = ПоместитьВоВременноеХранилище(,Форма);
//
//ПротоколПереноса = ПолучитьИзВременногоХранилища(АдресХранилища);
строка1 = ЗначениеВСтрокуВнутр(РезультатРаскроев);
Возврат ЗначениеИзСтрокиВнутр(строка1);
// МассивДанных = Новый Массив;
//Для Каждого СтрЛог из РезультатРаскроев Цикл
// // Создаем структуру для хранения данных строки таблицы значений,
// // список полей можно получить динамически, перебрал 1 строку ТЗ
// Стр = Новый Структура("Количество");
// // Копируем данные из строки таблицы значений в структуру
// ЗаполнитьЗначенияСвойств(Стр,СтрЛог);
// // Помещаем структуру в массив
// МассивДанных.Добавить(Стр);
//КонецЦикла;
//Возврат МассивДанных;
КонецФункции
После нажатия да! должна сформироватся обработка
16.01.202013.05.2023Ошибки
Данная ошибка возникает в тот момент, когда Вы пытаетесь вызвать серверный метод и передаете ему в качестве параметра управляемую форму.
Рассмотрим следующий модуль управляемой формы:
&НаСервере Функция ТестВызоваСервера(Форма) Форма.ТолькоПросмотр = Истина; КонецФункции // ТестВызоваСервера() &НаКлиенте Процедура ПокупательПриИзменении(Элемент) //попытка передачи переменной локального контекста на сервер ТестВызоваСервера(ЭтаФорма); КонецПроцедуры
Дело в том, что в контексте модуля управляемой формы переменная ЭтаФорма
доступна всегда (как на клиенте, так и на сервере) и дополнительно ее передавать не требуется (если только вы не вызываете процедуру или функцию, перед которой указана директива &НаСервереБезКонтекста
). Правильным будет следующий код:
&НаСервере Функция ТестВызоваСервера() ЭтаФорма.ТолькоПросмотр = Истина; КонецФункции // ТестВызоваСервера() &НаКлиенте Процедура ПокупательПриИзменении(Элемент) //вызов контекстной серверной функции ТестВызоваСервера(); КонецПроцедуры
Аналогичное замечание относится к серверным вызовам. Вы не можете передать содержимое переменной ЭтаФорма
на сервер. Вы можете только запросить необходимую информацию на сервере и изменить форму в контексте клиента, либо реализовать это через серверный метод самой формы. Например, такой код работать не будет:
&НаКлиенте Процедура ПокупательПриИзменении(Элемент) //попытка передачи переменной локального контекста на сервер ОбщийМодульСервер.Тест(ЭтаФорма); КонецПроцедуры
Подумайте сами, чем можно заменить такой вызов
Поделиться страницей в соц.сетях
Метки: Метки Управляемые формы
В управляемых формах может появиться следующая ошибка:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: НачалоСвойства: param Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине: Ошибка отображения типов: Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'
С данной ошибкой я столкнулся, когда пытался в управляемой форме на стороне сервера выполнить следующую команду:
ОбъектФормы = РеквизитФормыВЗначение("Объект"); ТЗВывода = ОбъектФормы.Бонусы.Выгрузить().Скопировать(); ЗначениеВРеквизитФормы(ОбъектФормы, "Объект");
Решением данной проблемы было обнулить переменную с таблицей данных:
ТЗВывода = Неопределено;