Ошибка преобразования данных xdto запись значения свойства param

При входе в базу 1с вы можете увидеть “Ошибка преобразования данных XDTO:

Начало Свойства: errorProcessingSettings

Форма: Элемент

Тип: {http://v8.1c.ru/8.2/managed-application/core}ErrorProcessingSettings по причине

Чаще всего ошибка возникает при определенном типе запуска: это либо через тонкий клиент, либо через линк42, случаи бывают разные. Через браузер такие базы запускаются без ошибок.

Есть простое решение данной проблемы.

Достаточно запустить базу доступным нам способом (где нет ошибки) включить Функции тех. специалиста (Меню — Настройки — Параметры — Режим технического специалиста)

В Функциях для технического специалиста ищем Управление настройками обработки ошибок (Стандартные)

Запускаем

Готово!

Уже более 10 000 компаний работают
в облачной 1С от 42Clouds

— Консультация по 1С Бесплатно!

— Поддержка 24/7 по техническим вопросам: в чате, по телефону, по почте

— Все типовые конфигурации онлайн, доступ через RDP, Remote App, Web

Ошибка передачи между клиентом и сервером

Я
   sidalexsandr

06.06.16 — 20:33

МассивТранспортныхСредств = Новый Массив;

    
    Для каждого СтрТранспортныеСредства Из ТранспортныеСредства Цикл

        
        МассивТранспортныхСредств.Добавить(СтрТранспортныеСредства.ТранспортноеСредство);

        
    КонецЦикла;

Запр2(Выборка, МассивТранспортныхСредств);

Выдает ошибку: {Обработка.Тест.Форма.Форма.Форма(99)}: Ошибка при вызове метода контекста (Запр2)

    Запр2(Выборка, МассивТранспортныхСредств);

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘param’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/managed-application/modules}param

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘РезультатЗапроса’

Вопрос: Подскажите, что я неправильно передаю между клиентом и сервером.

   Звездец

1 — 06.06.16 — 20:34

Весь код покажи, а то этот кусок мне несколько странным кажется

   Лефмихалыч

2 — 06.06.16 — 20:38

> что я неправильно передаю между клиентом и сервером.

результат запроса ты передаешь, а это неправильно.

Чтобы узнать, где неправильное значение, используй отладчик

   sidalexsandr

3 — 06.06.16 — 20:39

(1) &НаСервере

Процедура Запр2(Выборка, МассивТранспортныхСредств)

    Запрос = Новый Запрос;

    Запрос.Текст =

        «ВЫБРАТЬ

        |    Остатки.ТранспортноеСредство КАК ТранспортноеСредство,

        |    СУММА(Остатки.КоличествоОстаток) КАК КоличествоКоробок,

        |    СУММА(Остатки.КоличествоОстаток * ГабаритыКоробок.Высота * ГабаритыКоробок.Ширина * ГабаритыКоробок.Длина) КАК ОбъемГруза

        |ИЗ

        |    РегистрНакопления.ГрузыВТранспортныхСредствах.Остатки(, ) КАК Остатки

        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГабаритыКоробок КАК ГабаритыКоробок

        |        ПО Остатки.ВидКоробки = ГабаритыКоробок.ВидКоробки

        |ГДЕ

        |    Остатки.ТранспортноеСредство В(&ТранспортноеСредство)

        |

        |СГРУППИРОВАТЬ ПО

        |    Остатки.ТранспортноеСредство

        |

        |УПОРЯДОЧИТЬ ПО

        |    Остатки.ТранспортноеСредство»;

        Запрос.УстановитьПараметр(«ТранспортноеСредство», МассивТранспортныхСредств);

        Выборка = Запрос.Выполнить();

    
КонецПроцедуры

   sidalexsandr

4 — 06.06.16 — 20:40

(2) А как быть процедура исполняется на клиенте, а запрос только НаСервере.

   Звездец

5 — 06.06.16 — 20:41

После выполнить делай выгрузить(4)

   Звездец

6 — 06.06.16 — 20:43

И почему процедура , а не функция?(5)

   Lexey_

7 — 06.06.16 — 20:46

(3) и почему выборка, если это не выборка «Выборка = Запрос.Выполнить();»?

   mikecool

8 — 06.06.16 — 20:46

(4) выполни процу на сервере, будь мужиком

   sidalexsandr

9 — 06.06.16 — 20:47

(5) Сделал, выдает ошибку:

{Обработка.Тест.Форма.Форма.Форма(109)}: Ошибка при вызове метода контекста (Запр2)

    Запр2(Выборка);

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

НачалоСвойства: param    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’

   sidalexsandr

10 — 06.06.16 — 20:47

(8) Да, а как я тогда буду работать НаСервере с реквизитами формы?

   mikecool

11 — 06.06.16 — 20:48

(10) насервере доступны реквизиты объекта, используй их

   Лефмихалыч

12 — 06.06.16 — 20:51

(9) все верно, так и должно быть.

Не передавай это все на клиента. Обрабатывай на сервере.

   sidalexsandr

13 — 06.06.16 — 21:00

(12) Так я и обрабатываю запрос на сервере, а на клиента только пытаюсь передать результат.

   hhhh

14 — 06.06.16 — 21:17

(13) реквизиты формы нормально на сервере работают

   sidalexsandr

15 — 06.06.16 — 21:41

(11) Попробую

   H A D G E H O G s

16 — 06.06.16 — 22:18

(0) Закрой конфигуратор. Не твое это.

   sidalexsandr

17 — 07.06.16 — 17:43

(14) А что тогда работает только на клиенте. Знаю что Предупреждение() работает только на клиенте.

  

Nuobu

18 — 07.06.16 — 17:48

(17) Только на клиенте работают функции работы с пользователем. Всякие там элементы формы, реквизиты формы и их значения нормально работают и на сервере и на клиенте. А вот Запрос, результат его выполнения, создание элементов справочников и документов нужно смотреть на сервере.

Есть статья на инфостарте, почитай:

http://catalog.mista.ru/public/198766/

Ошибка передачи между клиентом и сервером

Я

  

sidalexsandr

06.06.16 — 20:33

МассивТранспортныхСредств = Новый Массив;

    
    Для каждого СтрТранспортныеСредства Из ТранспортныеСредства Цикл

        
        МассивТранспортныхСредств.Добавить(СтрТранспортныеСредства.ТранспортноеСредство);

        

    КонецЦикла;

Запр2(Выборка, МассивТранспортныхСредств);

Выдает ошибку: {Обработка.Тест.Форма.Форма.Форма(99)}: Ошибка при вызове метода контекста (Запр2)

    Запр2(Выборка, МассивТранспортныхСредств);

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘param’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/managed-application/modules}param

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘РезультатЗапроса’

Вопрос: Подскажите, что я неправильно передаю между клиентом и сервером.

  

Звездец

1 — 06.06.16 — 20:34

Весь код покажи, а то этот кусок мне несколько странным кажется

  

Лефмихалыч

2 — 06.06.16 — 20:38

> что я неправильно передаю между клиентом и сервером.

результат запроса ты передаешь, а это неправильно.

Чтобы узнать, где неправильное значение, используй отладчик

  

sidalexsandr

3 — 06.06.16 — 20:39

(1) &НаСервере

Процедура Запр2(Выборка, МассивТранспортныхСредств)

    Запрос = Новый Запрос;

    Запрос.Текст =

        «ВЫБРАТЬ

        |    Остатки.ТранспортноеСредство КАК ТранспортноеСредство,

        |    СУММА(Остатки.КоличествоОстаток) КАК КоличествоКоробок,

        |    СУММА(Остатки.КоличествоОстаток * ГабаритыКоробок.Высота * ГабаритыКоробок.Ширина * ГабаритыКоробок.Длина) КАК ОбъемГруза

        |ИЗ

        |    РегистрНакопления.ГрузыВТранспортныхСредствах.Остатки(, ) КАК Остатки

        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГабаритыКоробок КАК ГабаритыКоробок

        |        ПО Остатки.ВидКоробки = ГабаритыКоробок.ВидКоробки

        |ГДЕ

        |    Остатки.ТранспортноеСредство В(&ТранспортноеСредство)

        |

        |СГРУППИРОВАТЬ ПО

        |    Остатки.ТранспортноеСредство

        |

        |УПОРЯДОЧИТЬ ПО

        |    Остатки.ТранспортноеСредство»;

        Запрос.УстановитьПараметр(«ТранспортноеСредство», МассивТранспортныхСредств);

        Выборка = Запрос.Выполнить();

    
КонецПроцедуры

  

sidalexsandr

4 — 06.06.16 — 20:40

(2) А как быть процедура исполняется на клиенте, а запрос только НаСервере.

  

Звездец

5 — 06.06.16 — 20:41

После выполнить делай выгрузить(4)

  

Звездец

6 — 06.06.16 — 20:43

И почему процедура , а не функция?(5)

  

Lexey_

7 — 06.06.16 — 20:46

(3) и почему выборка, если это не выборка «Выборка = Запрос.Выполнить();»?

  

mikecool

8 — 06.06.16 — 20:46

(4) выполни процу на сервере, будь мужиком

  

sidalexsandr

9 — 06.06.16 — 20:47

(5) Сделал, выдает ошибку:

{Обработка.Тест.Форма.Форма.Форма(109)}: Ошибка при вызове метода контекста (Запр2)

    Запр2(Выборка);

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

НачалоСвойства: param    Форма: Элемент    Тип: {http://www.w3.org/2001/XMLSchema}anyType

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’

  

sidalexsandr

10 — 06.06.16 — 20:47

(8) Да, а как я тогда буду работать НаСервере с реквизитами формы?

  

mikecool

11 — 06.06.16 — 20:48

(10) насервере доступны реквизиты объекта, используй их

  

Лефмихалыч

12 — 06.06.16 — 20:51

(9) все верно, так и должно быть.

Не передавай это все на клиента. Обрабатывай на сервере.

  

sidalexsandr

13 — 06.06.16 — 21:00

(12) Так я и обрабатываю запрос на сервере, а на клиента только пытаюсь передать результат.

  

hhhh

14 — 06.06.16 — 21:17

(13) реквизиты формы нормально на сервере работают

  

sidalexsandr

15 — 06.06.16 — 21:41

(11) Попробую

  

H A D G E H O G s

16 — 06.06.16 — 22:18

(0) Закрой конфигуратор. Не твое это.

  

sidalexsandr

17 — 07.06.16 — 17:43

(14) А что тогда работает только на клиенте. Знаю что Предупреждение() работает только на клиенте.

  

Nuobu

18 — 07.06.16 — 17:48

(17) Только на клиенте работают функции работы с пользователем. Всякие там элементы формы, реквизиты формы и их значения нормально работают и на сервере и на клиенте. А вот Запрос, результат его выполнения, создание элементов справочников и документов нужно смотреть на сервере.

Есть статья на инфостарте, почитай:

http://catalog.mista.ru/public/198766/

При входе в базу 1с вы можете увидеть “Ошибка преобразования данных XDTO:

Начало Свойства: errorProcessingSettings

Форма: Элемент

Тип: {http://v8.1c.ru/8.2/managed-application/core}ErrorProcessingSettings по причине

Чаще всего ошибка возникает при определенном типе запуска: это либо через тонкий клиент, либо через линк42, случаи бывают разные. Через браузер такие базы запускаются без ошибок.

Есть простое решение данной проблемы.

Достаточно запустить базу доступным нам способом (где нет ошибки) включить Функции тех. специалиста (Меню — Настройки — Параметры — Режим технического специалиста)

В Функциях для технического специалиста ищем Управление настройками обработки ошибок (Стандартные)

Запускаем

Готово!

Уже более 10 000 компаний работают
в облачной 1С от 42Clouds

— Консультация по 1С Бесплатно!

— Поддержка 24/7 по техническим вопросам: в чате, по телефону, по почте

— Все типовые конфигурации онлайн, доступ через RDP, Remote App, Web

Просмотров 12к. Опубликовано 24 октября, 2018 Обновлено 24 октября, 2018

Ошибка преобразования данных XDTO: Текст XML содержит недопустимый символ.

На самом деле ошибка преобразования XDTO является не какой-то определенной ошибкой, а является большим семейством ошибок возникающих при работе одного из базовых механизмов платформы 1С. Этот механизм обеспечивает передачу данных между различными подсистемами платформы, при этом данные из внутреннего представления одной подсистемы преобразуются в текстовый формат XML, передаются в другую подсистему, и там  опять преобразуются во внутреннее представление. Ошибка преобразования XDTO говорит, что прямом или обратном преобразовании обнаружено какое-то несоответствие, из-за которого оно не может быть выполнено.

Частные причины ошибки

Существует очень много частных причин ошибки преобразования XDTO.  Сведения  доступные под кнопкой Подробно могут помочь в понимании частной причины, но далеко не всегда.

Прежде чем приступить к диагностике причины ошибки XDTO, следует выполнить стандартные профилактические операции над ИБ: очистить кэш, проверить состояния файла, выполнить тестирование ИБ.

Взаимодействие Клиента и Сервера

При запуске 1С в режиме Тонкий клиент взаимодействие клиента с ИБ происходит с использование преобразования XDTO, и если оно приводит к ошибке, то в тех случаях, когда это возможно, следует воспользоваться режим Толстый клиент.

Сырые и Неоригинальные решения

Если ошибка преобразования XDTO возникает в неоригинальной конфигурации или неоригинальной обработке, то возможно, причина в неоригинальном коде, который не был должным образом оттестирован. Это возможно и в оригинальных решения от 1С после установки сырых обновлений.

В этом случае необходимо отказаться от использования неоригинального или сырого решения и вернуться к предыдущему состоянию кода из архива.

Есть таблица с товарами и ценами в документе Поставка. Есть справочник контрагентов с таблицей цен для каждого контрагента. Нужно из таблицы цен контрагента вытащить цену на нужный товар. Для этого написал такой код:

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
	Контрагент = Объект.Контрагент;
	СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
	Товар = Элементы.Товары.ТекущиеДанные.Номенклатура;
	СтрокаТабличнойЧасти.Цена = ПолучитьЦены(Контрагент,Товар);	
КонецПроцедуры

&НаСервере
Функция ПолучитьЦены(Контрагент, Товар)
Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	  	|	Контрагенты.Цены.Цена
	  	|ИЗ
	  	|	Справочник.Контрагенты КАК Контрагенты
		|ГДЕ
	  	|	Контрагенты.Наименование = &Контрагент
	  	|	И Контрагенты.Цены.Товар = &Товар";
	Запрос.УстановитьПараметр("Контрагент", Контрагент);
	Запрос.УстановитьПараметр("Товар", Товар);
	Результат = Запрос.Выполнить(); 	
	Возврат Результат.Цена;
КонецФункции

Но вот получить цену так и не удалось. Где здесь может быть ошибка?

При отладке данного кода такой результат:
{Документ.Поставка.Форма.ФормаДокумента.Форма(40)}: Поле объекта не обнаружено (Цена)
Возврат Результат.Цена;


  • Вопрос задан

    более трёх лет назад

  • 27561 просмотр

И запрос поправьте.

Функция ПолучитьЦены(Контрагент, Товар)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
    	|	ЦеныКонтрагента.Цена КАК Цена
    	|ИЗ
    	|	Справочник.Контрагенты.Цены КАК ЦеныКонтрагента
        |ГДЕ
    	|	ЦеныКонтрагента.Ссылка = &Контрагент
    	|	И ЦеныКонтрагента.Товар = &Товар";
  Запрос.УстановитьПараметр("Контрагент", Контрагент);
  Запрос.УстановитьПараметр("Товар", Товар);
  Результат = Запрос.Выполнить().Выбрать().Следующий(); 	
  Возврат Результат.Цена;
КонецФункции

все банально

РезультатЗапроса = Запрос.Выполнить();	
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Цена = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	Цена = ВыборкаДетальныеЗаписи.Цена;
КонецЦикла;

Имейте ввиду, что если в результате запроса возвращается несколько строк, то вы получите результат последней строки.

Пригласить эксперта

Вы получаете таблицу (пусть даже состоящую из одной строки).
Вам нужно не просто результаты запроса читать, а или обходить все строки таблицы в цикле или прямо обращаться к первой строчке таблицы.


  • Показать ещё
    Загружается…

30 янв. 2023, в 12:41

7000 руб./за проект

30 янв. 2023, в 12:39

3000 руб./за проект

30 янв. 2023, в 12:37

1000 руб./в час

Минуточку внимания

1С 8 Ошибка «Ошибка преобразования данных XDTO:» при открытии базы в режиме 1С: Предприятие

Описание ошибки:
База была выгружена из ирхива .dt. База файловая, конфигурация 1С: Бухгалтерия предприятия, редакция 3.0. При работе в конфигураторе и при запуска конфигуратора ошибок не возникает. Ошибка проявляет себя только при попытке запуска в режиме 1С: Предприятие. Даже не выводится форма для авторизации пользователя, как возникает ошибка. Релиз платформы 1С: Предприятие — 8.3.12.89.

Найденные решения:

Нажатие на изображении увеличит его
1С 8, как устранить, убрать, исправить ошибку, при запуске базы, Ошибка преобразования данных XDTO, НачалоСвойства: errorProcessingSettings, messageTemplates, category

Полный текст ошибки:

Ошибка преобразования данных XDTO:

НачалоСвойства: errorProcessingSettings Форма: Элемент Тип: {http://v8.1c.ru/8.2/managed-application/core}ErrorProcessingSettings

по причине:

Ошибка преобразования данных XDTO:

НачалоСвойства: messageTemplates Форма: Элемент Тип: {http://v8.1c.ru/8.2/managed-application/core}ErrorMessagesTexts

по причине:

Ошибка преобразования данных XDTO:

НачалоСвойства: category Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/core}ErrorCategory

Ошибка в некотором роде редкая, но не настолько, чтобы остаться неизвестной. Короткое обсуждение на форуме dev.mista.ru, содержащее ссылку на описание в каталоге ошибок (потребуется авторизация для сайта ИТС) продукта технологической платформы позволило точно определить проблему — неподходящий релиз платформы. Как указано — использовался релиз платформы 8.3.18.1289.



Нажатие на изображении увеличит его
ошибка при запуске базы 1С 8, Ошибка преобразования данных XDTO, форма, элемент тип: http://v8.1c.ru/8.2/managed-application/core

Таким образом оказалось, что необходимо установить более высокую минорную версию релиза 8.3.18 — 8.3.18.13.63 или позднее. Так же ошибка может возникать для более ранних релизов версий 8.3.17 (до 17.2127), 8.3.19 (до релиза 19.1150), а так же для 8.3.20 (ранее релиза 20.1363).

Обновление релиза платформы 1С:предприятие на релиз 8.3.18.1563 на рабочем месте, где возникла ошибка, исправило ситуацию и база была запущена в ошибок.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

04-10-2021

Журавлев А.С.
(Сайт azhur-c.ru)

Одним из самых популярных форматов данных, используемых практически в любой компании, является XML (расширяемый язык разметки). Разработчики 1С создали специальный объект XDTO для удобства своих клиентов и простого взаимодействия с файлами XML, поэтому программисту 1С важно работать с этими объектами платформы, так как обмен данными через XML встречается постоянно.

Этот функционал создавался как удобный инструмент обмена данными между конфигурациями и другими приложениями. Также этот механизм используют для работы с web-сервисами и для обработки произвольных данных. Большое преимущество XDTO перед другими способами – в нем есть возможность обращаться к файлу XML, как к объекту 1С. То есть все реквизиты можно будет получить, описывая структуру через точку, не задумываясь о скобках, тегах и атрибутах.

Взаимодействие с файлами XML происходит по заранее установленным правилам, описанным в объекте структуры конфигурации – XDTO – пакеты в 1С 8.3. Суть этих элементов структуры в том, что они представляют собой схемы, по которым будут распознаваться данные из XML-файлов. В типовых конфигурациях уже присутствуют подобные объекты, но при работе с конкретными файлами понадобятся другие схемы.

Существует два способа добавить XDTO-пакет в конфигурацию:

  • Собственноручно создать. Этот вариант подойдет при самостоятельной работе с XML определенного формата. Зная, какие данные будут подаваться на вход для импорта с использованием XDTO, можно заранее создать в конфигурации нужный объект. Этот вариант хорош, если обмен данными налажен и никаких изменений не планируется;

    Рис.1 XDTO пакеты

    Рис.1 XDTO пакеты
  • Импорт присланной схемы. Когда нам присылают данные, их схема может оказаться какой угодно, особенно, если раньше мы не работали с источником. Сильно упростит ситуацию, если вместе с XML нам пришлют и файл формата xsd. В нем содержится выгрузка XDTO-пакета, который может разобрать конкретные XML. Нам останется лишь импортировать его.

Чтобы загрузить данные из присланной нам схемы, необходимо в режиме конфигуратор открыть раздел «Общие» и «XDTO-пакеты». Через контекстное меню выбрать пункт «Импорт XML-схемы…», выбрать файл и подтвердить пространство имен, взятое из файла. После этого необходимо обновить конфигурацию, и предварительные настройки сделаны.

Но на самом деле в последнем случае нам необязательно создавать XDTO-пакеты в конфигурации 1С 8.3. Существует возможность только использовать XSD-схему, присланную нам из отдельного файла, не внося изменения в структуру базы 1С. Для этого нужно воспользоваться кодом, объясняющим платформе 1С, какой тип объекта с какими параметрами будет загружаться.

Это происходит следующими командами:


ФайлXSD = Новый Массив();
ФайлXSD.Добавить("D:1strust.xsd");
ФабрикаXDTOИзФайла = СоздатьФабрикуXDTO(ФайлXSD);
Номенклатура = ФабрикаXDTOИзФайла.Тип("http://www.1c.ru/products", "Номенклатура");

Экспорт и импорт файла

После того как мы разобрались с принципами использования пакетов XDTO, нужно посмотреть на механику работы с файлами XML. Лучше всего это будет видно на простом примере, чтобы понять основы. Добавим новый элемент в раздел XDTO-пакетов и настроим его следующим образом:

  1. Заполняем URI-пространство имен в свойствах XDTO пакета. Среди разработчиков 1С принято заполнять этот реквизит адресом страницы, заполненной описанием тех данных, с которыми происходит работа. Это помогает в работе, но не всегда возможно. В иных случаях заполняют произвольным текстом;
  2. Задаем тип объекта и его свойства, используя контекстное меню. Задаем имя этих параметров и для свойств определяем тип, выбирая его из предложенных платформой.

Рис.2 Параметры пакета

Рис.2 Параметры пакета

Следующим этапом будет написание процедуры для создания файла XML по описанной выше схеме. Код достаточно прост, поскольку создан XDTO-пакет, а у элемента всего 2 свойства – «Наименование» и «Артикул». Обращаться к конкретной схеме позволяет объект платформы «ФабрикаXDTO». Сама процедура состоит из:

  1. Определение схемы будущей XML;
    
    ТипФабрики = ФабрикаXDTO.Тип("http://www.primerXML.ru/Nomen","Номенклатура");
    

  2. Заполнение свойств номенклатуры;
    
    Номенклатура = ФабрикаXDTO.Создать(ТипФабрики);
    Номенклатура.Наименование = "Тест XML";
    Номенклатура.Артикул = "2";
    

  3. Создание нового XML файла.
    
    ИмяФайла = "D:1struct1.xml";
    МойXML = Новый ЗаписьXML;
    ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
    МойXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML);
    МойXML.ЗаписатьОбъявлениеXML();
    ФабрикаXDTO.ЗаписатьXML(МойXML, номенклатура);
    МойXML.Закрыть();
    

Чтение XML-файлов с помощью конкретной фабрики XDTO по уже созданному в конфигурации пакету ничуть не сложнее. Алгоритм похож по структуре и отличается только операциями взаимодействия с XML-файлами. В данном случае нам нужно воспользоваться объектом платформы «ЧтениеXML» и прочитать содержимое в переменную. На выходе у нее будет тип «ОбъектXDTO», и вы сможете обращаться ко всем ее свойствам через точку.


ТипФабрики = ФабрикаXDTO.Тип("http://www.primerXML.ru/Nomen","Номенклатура");
 
ИмяФайла = "D:1struct1.xml";
МойXML = Новый ЧтениеXML;
МойXML.ОткрытьФайл(ИмяФайла);
номенклатура = ФабрикаXDTO.ПрочитатьXML(МойXML, ТипФабрики);
МойXML.Закрыть();

Теперь попробуем прочитать файл, схемы которого нет в нашей конфигурации. Для этого экспортируем XDTO-пакет в файл формата xsd и удалим схему из конфигурации. После этого нам придется объяснить платформе, откуда ей брать схему читаемой XML-кодом, продемонстрированным ранее. Однако в простейших случаях 1С самостоятельно может распознать все свойства.

Рис.3 Экспорт XDTO-пакета

Рис.3 Экспорт XDTO-пакета

Лучше все-таки не рассчитывать на понятливость платформы 1С, а использовать точную схему XML. Многие специалисты используют сторонний софт для их создания, но для этого необходим достаточно большой опыт и уровень подготовки. Работа с пакетами XDTO требует внимания и соблюдения точного соответствия файлов заданной схеме, чтобы минимизировать возможные ошибки.

Исправление ошибок

Одной из достаточно распространенных ошибок, связанных с работой с XDTO-пакетами, является «Ошибка преобразования данных XDTO». Ее суть заключается в том, что платформа не может разобрать данный ей XML-файл по заданной схеме. При получении подобной ошибки при импорте данных, необходимо проверить формат файлов – возможно, присутствуют незакрытые теги.

Зачастую проблема с ошибками преобразования данных возникает и по другим причинам:

  • Ошибки в обновлении платформы или конфигурации;
  • Обмен между базами разных версий;
  • Недочеты в алгоритме приема данных;
  • Проблемы с временной памятью конкретного компьютера.

Чтобы исправить эту ошибку, сначала почистите кэш или удалите, а также заново добавьте информационную базу в список баз. Затем внимательно проверьте файл XML – вдруг случайно сделали ошибку в его тексте, проверьте соответствие структуры пакету XDTO. Если ошибка появилась после обновления, сделайте тестирование и исправление ИБ, сохранив перед этим резервную копию базы. Если проблема не уйдет, вернитесь на предыдущую версию и подождите, пока разработчики 1С не разберутся с этой проблемой.

Рис.4 Ошибка преобразования данных

Рис.4 Ошибка преобразования данных

Еще одна проблема, часто мучающая программистов 1С, работающих с XDTO, – ошибка проверки данных. Если при импорте вы видите подобный текст, то с высокой долей вероятности источник проблемы в несоответствии файла нужной схеме. Но проблема может быть не на вашей стороне, а в базе, из которой выгружали XML. Чтобы исправить эту оплошность, придется внимательно изучить всю последовательность действий и найти, после чего файл перестал соответствовать ожиданиям.

Рис.5 Ошибка проверки данных

Рис.5 Ошибка проверки данных

Более сложная для анализа проблема, если при обмене информацией 1С выдает ошибку о несоответствии типов XDTO. В этом случае придется проверять все данные, находить ошибки и их причины. В некоторых случаях ошибки могут быть в коде, иногда – в данных информационной базы. Чтобы это понять, необходимо иметь доступ к базам причастным к обмену и четко понимать всю суть происходящего экспорта и импорта.

Рис.6 Несоответствие типов XDTO

Рис.6 Несоответствие типов XDTO

На первый взгляд работа с XDTO достаточно сложна, поэтому на первое время рекомендуется добавлять XDTO-пакеты в 1С для большего порядка и учета. Конечно, все нюансы изучить сразу невозможно, но в процессе работы вы будете продолжать учиться. Но с уверенной теоретической базой намного удобнее начинать разбираться в этом вопросе.

ИСТОЧНИК ОШИБОК:

Ситуации, когда возможно появление этой проблемы:
— Обмен в распределенной базе данных.
— Обновление конфигурации 1С.
— Импорт из внешних источников в 1С.

ПРОБЛЕМА:

{Форма.Управляемая.Форма(1000)}: Ошибка при вызове метода контекста (ПолучитьСписокНаСервере)
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘v’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Текст XML содержит недопустимый символ в позиции 5 :
?{?{?U

ВАРИАНТЫ РЕШЕНИЯ:

&НаСервере
Перем RegExp;

&НаКлиенте
Процедура Старт(Команда)

АнализируемыйТекст = «§ | §§ «» | a86;a87;♥♦♣♠•88;75;89;a92;b34;b35;a88;58;68;U97;R52;¶§44;V16;↑↓→←W35;↔50;60; !
| ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
| АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя
| ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω
| 0123456789
| ~!@#$%^&*(){}[]_-=+|/*:;.<>?,№ !
| ' | © | ® | µ | «» | ¤¢€£¥ | § | ½¼¾ | ¹²³ | °±×÷؃§ µ";

ТекстРезультат = СтартНаСервере(АнализируемыйТекст);

Сообщить(""+АнализируемыйТекст+"
|"+ТекстРезультат);

КонецПроцедуры

&НаСервере
Функция СтартНаСервере(Знач Текст)

RegEXP_Инициализация();

Если RegExp = Неопределено Тогда
Value = ИсключитьНеЧитаемыеСимволыИзСтроки(Текст);                 // Вариант "НЕТИПОВОЙ 1С".
Иначе
Value = ИсключитьНеЧитаемыеСимволыИзСтроки_REGEXP(Текст);    // Вариант "НЕТИПОВОЙ RegExp".
КонецЕсли;
//Value = ЗаменитьНедопустимыеСимволыXML(Value);                           // Вариант "ТИПОВОЙ 1С".

Возврат Value;

КонецФункции

ВАРИАНТ РЕШЕНИЯ "ТИПОВОЙ 1С":

// Функция (ТИПОВАЯ 1С), оставляющая в строке только допустимые для XML символы и цифры.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ")

Позиция = НайтиНедопустимыеСимволыXML(Текст);
Пока Позиция > 0 Цикл
ТекущийСимвол = Сред(Текст, Позиция, 1);
Если КодСимвола(ТекущийСимвол) = 21 Тогда    // Параграф.
Текст = СтрЗаменить(Текст, ТекущийСимвол, Символ(167));
Позиция = НайтиНедопустимыеСимволыXML(Текст);
Продолжить;
КонецЕсли;
Текст = СтрЗаменить(Текст, ТекущийСимвол, СимволЗамены);
Позиция = НайтиНедопустимыеСимволыXML(Текст);
КонецЦикла;

Возврат Текст;

КонецФункции

Достоинства:
- Максимально возможное сохранение содержимого исходной строки.
Исключаются только недопустимые для XML символы.
- Самая быстрая функция.
Недостатки:
- В итоговой строке могут присутствовать нечитаемье символы ("аброказаябры").

ВАРИАНТ РЕШЕНИЯ "НЕТИПОВОЙ RegExp":

// Функция (RegExp), инициализация.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция RegEXP_Инициализация()

// Читаемые символы.
// Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// Кирилица = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
// Греческие = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω";
// Цифры = "0123456789";
// СпециальныеСимволы = "~
!@#$%^&*(){}[]_-=+|/*:;.<>?,№«» «;
ДвойнаяКавычка = «^»»»;
ОдинарнаяКавычка = «^’»;
АпострофОбратный = «^» + Символ(769);    // КодСимвола 769. Обратный для символа на букве «Ё».
АвторскоеПраво = «^©»;                             // КодСимвола 169. «Copyright» — латинская буква C в окружности — авторское право.
Зарезервировано = «^®»;                           // КодСимвола 174. «Registered» — латинская буква R в окружности — товарный знак.
ТоварныйЗнак = «^™»;                               // Верхний  индекс ТМ.
ШирокоеТире = «^—»;                                // КодСимвола 8212.
ДенежныеСимволы = «^¤^¢^€^£^¥»;         // Денежная единица, Цент, Евро, Фунт стерлингов, Иена или юань.
ДробныеСимволы = «^½^¼^¾»;                // Дроби: 1/2, 1/4, 3/4.
СимволыСтепени = «^¹^²^³»;                    // Степени: 1, 2, 3.
ПрочиеСимволы = «^°^±^×^÷^Ø^ƒ^µ^»+Символ(167);    // Градус, Плюс/Минус, Знак умножения, Знак деления, Диаметр, Знак функции, Микро, Параграф.

ЧитаемыеСимволы = «[«;
ЧитаемыеСимволы = ЧитаемыеСимволы + «^a-z^A-Z^а-я^А-Я^0-9^Ё^ё^Α-Ω^α-ω»;    // Латиница + Кирилица + Цифры + Греческие.
ЧитаемыеСимволы = ЧитаемыеСимволы + «^~^^!^@^#^$^%^^^&^*^(^)^{^}^[^]^_^-^=^+^^|^/^*^:^;^.^^?^,^№^«^»^ ";    // СпециальныеСимволы.
ЧитаемыеСимволы = ЧитаемыеСимволы + ДвойнаяКавычка + ОдинарнаяКавычка + АпострофОбратный + АвторскоеПраво + Зарезервировано +ТоварныйЗнак;
ЧитаемыеСимволы = ЧитаемыеСимволы + ШирокоеТире + ДенежныеСимволы + ДробныеСимволы + СимволыСтепени + ПрочиеСимволы;
ЧитаемыеСимволы = ЧитаемыеСимволы + "]";

ПолучитьCOMОбъектREGEXP(ЧитаемыеСимволы, Ложь, Истина, Ложь);

КонецФункции

// СПАСИБО Evg-Lylyk: http://infostart.ru/public/64222/
//
&НаСервере
Процедура ПолучитьCOMОбъектREGEXP(Шаблон, ИскатьДоПервогоСовпадения = Истина, МногоСтрок = Истина, ИгнорироватьРегистр = Истина)

Если RegExp = Неопределено Тогда   // Нужна инициализация.
Попытка
RegExp = Новый COMОбъект("VBScript.RegExp");    // Создаем объект для работы с регулярными выражениями.
Исключение
RegExp = Неопределено;
Возврат;
КонецПопытки;
КонецЕсли;

// Заполняем данные.
RegExp.MultiLine = МногоСтрок;                              // Истина — текст многострочный, Ложь — одна строка.
RegExp.Global = НЕ ИскатьДоПервогоСовпадения;   // Истина — поиск по всей строке, Ложь — до первого совпадения.
RegExp.IgnoreCase = ИгнорироватьРегистр;           // Истина — игнорировать регистр строки при поиске.
RegExp.Pattern = Шаблон;                                     // Шаблон (регулярное выражение).

КонецПроцедуры

// Функция (НЕТИПОВАЯ REGEXP), оставляющая в строке только читаемые(допустимые) для XML символы и цифры.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция ИсключитьНеЧитаемыеСимволыИзСтроки_REGEXP(Знач АнализируемыйТекст, ЗаменятьСимволы = Истина, СимволЗамены = " ")

Если НЕ RegExp.Test(АнализируемыйТекст) Тогда
Возврат АнализируемыйТекст;
КонецЕсли;

// Формирование результирующей строки.
ИтоговаяСтрока = АнализируемыйТекст;

РезультатАнализаСтроки = RegExp.Execute(АнализируемыйТекст);

Для Каждого Результат ИЗ РезультатАнализаСтроки Цикл
ТекущийСимвол = Результат.Value;
Если КодСимвола(ТекущийСимвол) = 21 Тогда    // Параграф.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, Символ(167));
Продолжить;
КонецЕсли;
Если ЗаменятьСимволы Тогда
// Замена символа в строке.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, СимволЗамены);
Иначе
// Сокращение строки на символ.
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, ТекущийСимвол, "");
КонецЕсли;
КонецЦикла;

Возврат ИтоговаяСтрока;

КонецФункции

Достоинства:
- Остаются только визуализируемые, понятно читаемые допустимые для XML символы.
- Сопоставима по скорости с функцией ЗаменитьНедопустимыеСимволыXML (~ 0.5%).
Недостатки:
- Отдельные, возможно, необходимые символы могут исключаться.
(необходимо дополнить переменную ЧитаемыеСимволы).

ВАРИАНТ РЕШЕНИЯ "НЕТИПОВОЙ 1С":

// Функция (НЕТИПОВАЯ 1С), оставляющая в строке только читаемые(допустимые) для XML символы и цифры.
//
// Возвращаемое значение:
//    Строка.
//
&НаСервере
Функция ИсключитьНеЧитаемыеСимволыИзСтроки(Знач АнализируемыйТекст, ЗаменятьСимволы = Истина, СимволЗамены = " ")

// Читаемые символы.
Латиница = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Кирилица = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
Греческие = "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψω";
Цифры = "0123456789";
СпециальныеСимволы = "~
!@#$%^&*(){}[]_-=+|/*:;.<>?,№«» «;
ДвойнаяКавычка = «»»»;
ОдинарнаяКавычка = «‘»;
АпострофОбратный = «L9;»;           // КодСимвола 769. Обратный для символа на букве «Ё».
АвторскоеПраво = «©»;             // КодСимвола 169. «Copyright» — латинская буква C в окружности — авторское право.
Зарезервировано = «®»;           // КодСимвола 174. «Registered» — латинская буква R в окружности — товарный знак.
ТоварныйЗнак = «™»;               // Верхний  индекс ТМ.
ШирокоеТире = «—»;                // КодСимвола 8212.
ДенежныеСимволы = «¤¢€£¥»;  // Денежная единица, Цент, Евро, Фунт стерлингов, Иена или юань.
ДробныеСимволы = «½¼¾»;    // Дроби: 1/2, 1/4, 3/4.
СимволыСтепени = «¹²³»;         // Степени: 1, 2, 3
ПрочиеСимволы = «°±×÷؃µ»+Символ(167);    // Градус, Плюс/Минус, Знак умножения, Знак деления, Диаметр, Знак функции, Микро, Параграф.

ЧитаемыеСимволы = Латиница + Кирилица + Греческие + Цифры + СпециальныеСимволы + ШирокоеТире
+ ДвойнаяКавычка + ОдинарнаяКавычка + АпострофОбратный + АвторскоеПраво + Зарезервировано + ТоварныйЗнак
+ ДенежныеСимволы + ДробныеСимволы + СимволыСтепени + ПрочиеСимволы;

// Формирование результирующей строки.
ИтоговаяСтрока = «»;
Для НомерСимвола = 1 ПО СтрДлина(АнализируемыйТекст) Цикл
ТекущийСимвол = Сред(АнализируемыйТекст, НомерСимвола, 1);
// Заменяемые символы. Системный набор значений: «Символы»:
Если ТекущийСимвол = Символы.ВК ИЛИ ТекущийСимвол = Символы.ВТаб ИЛИ ТекущийСимвол = Символы.НПП
ИЛИ ТекущийСимвол = Символы.ПС ИЛИ ТекущийСимвол = Символы.ПФ ИЛИ ТекущийСимвол = Символы.Таб Тогда
ТекущийСимвол = СимволЗамены;
КонецЕсли;
Если КодСимвола(ТекущийСимвол) = 21 Тогда    // Параграф.
ТекущийСимвол = Символ(167);
КонецЕсли;
Если Найти(ЧитаемыеСимволы, ТекущийСимвол) > 0 Тогда
ИтоговаяСтрока = ИтоговаяСтрока + ТекущийСимвол;
Иначе
Если ЗаменятьСимволы Тогда
ИтоговаяСтрока = ИтоговаяСтрока + СимволЗамены;
Иначе
// Сокращение строки на символ.
КонецЕсли;
КонецЕсли;
КонецЦикла;

Возврат ИтоговаяСтрока;

КонецФункции

Достоинства:
— Остаются только визуализируемые, понятно читаемые допустимые для XML символы.
Недостатки:
— Отдельные, возможно, необходимые символы могут исключаться.
(необходимо дополнить переменную ЧитаемыеСимволы).
— Медленнее предыдущих на 30 %.

В целях недопущения искажений текста в ссылках на скачивание находится обработка с текстом функций.

передаю параметр в функцию, выдает ошибку. Подскажите пожалуйста.

Автор vurdalak, 22 окт 2012, 17:04

0 Пользователей и 1 гость просматривают эту тему.

Вот код:

&НаКлиенте
Процедура КнопкаФункция(Команда)
СерияДок = ЭтаФорма.Элементы.ТоварыСерия;
Сообщить(НайтиСрокГодности(СерияДок));
КонецПроцедуры

&НаСервере
Функция НайтиСрокГодности(СерияДок)  Экспорт

       Перем СерияДляПоиска, СсылкаНайденнойСерии;
    СерияДляПоиска = Справочники.Серии;
   СсылкаНайденнойСерии = СерияДляПоиска.НайтиПоНаименованию(СерияДок);
    Если СсылкаНайденнойСерии = СерияДляПоиска.ПустаяСсылка() Тогда
        Возврат "Серии не найдено";
   Иначе
        Возврат СсылкаНайденнойСерии.СрокГодности;
    КонецЕсли;

   КонецФункции   


Вот Ошибка:
{Документ.ЗаказПоставщику.Форма.ФормаДокумента.Форма(2239)}: Ошибка при вызове метода контекста (НайтиСрокГодности)
Сообщить(НайтиСрокГодности(СерияДок));
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘ПолеФормы’


Возможно вы все таки хотите передавать значение элемента а не сам элемент.

Если сам элемент, то так делать нельзя. Если значение, то оно и так доступно на сервере, вы же переходите на сервер с контекстом.


Вообще хочу каким то образом передавать поле формы ТоварыСерия, чтобы назад получать данные по этой серии. Например узнать данные по реквизитам СрокГодности, ОстСрокГодности в справочнике серии.


Элементы на форме не существуют без реквизитов формы. Берите данные из реквизита формы. И возвращать ссылку на форму тоже не стоит.


Спасибо за помощь. С этим вопросом я разобрался. Скоро опять появятся другие))


1. Директиву замените на «НаСервереБезКонтекста»
2. Ссылку на серию ищите с помощью запроса

— так меньше данных передаем между клиентом и сервером

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавлено: 11 фев 2019, 20:11


Цитата: sawogle от 11 фев 2019, 19:39
У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавляю скрин! Заранее спасибо!!!

Добавлено: 12 фев 2019, 19:13


Цитата: sawogle от 11 фев 2019, 19:39
У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавлено: 11 фев 2019, 20:11


Цитата: sawogle от 11 фев 2019, 19:39
У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавляю скрин! Заранее спасибо!!!

Все тут я разобрался. :zebzdr:
Другой вопрос (может быть и не в этой теме) В Табличной части Оборудование справочника «Контрагенты» я пытаюсь реализовать ввод данных через произвольную форму с такими же реквизитами что и в табличной части, создал кнопку «добавить» прописал всю структуру (см. скрин) НО в табЧасть не записывает. В Документе «Квитанция» это получилось, а в справочнике нет :fdbsdfbsd:

Добавлено: 12 фев 2019, 19:14


Цитата: sawogle от 11 фев 2019, 19:39
У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавлено: 11 фев 2019, 20:11


Цитата: sawogle от 11 фев 2019, 19:39
У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавляю скрин! Заранее спасибо!!!

Добавлено: 12 фев 2019, 19:13


Цитата: sawogle от 11 фев 2019, 19:39
У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавлено: 11 фев 2019, 20:11


Цитата: sawogle от 11 фев 2019, 19:39
У меня такая же проблема, точнее их 2  при переводе с  8.2 на 1С:Предприятие 8.3 (8.3.13.1644) (Собственная конфигурация) (в предыдущей все работало!!!!)

Добавляю скрин! Заранее спасибо!!!

Все тут я разобрался. :zebzdr:
Другой вопрос (может быть и не в этой теме) В Табличной части Оборудование справочника «Контрагенты» я пытаюсь реализовать ввод данных через произвольную форму с такими же реквизитами что и в табличной части, создал кнопку «добавить» прописал всю структуру (см. скрин) НО в табЧасть не записывает. В Документе «Квитанция» это получилось, а в справочнике нет :fdbsdfbsd:   

Заранее Спасибо


Guildenstern_

3 / 3 / 1

Регистрация: 30.10.2019

Сообщений: 92

1

02.05.2020, 12:28. Показов 15294. Ответов 1

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Что делать с ошибкой:
{Документ.ПоступлениеТоваров.Форма.ФормаДокумента.Форма(5)}: Ошибка при вызове метода контекста (ЗаполнитьЦенуИзРегистра)
Элементы.Товары.ТекущиеДанные.Цена=ЗаполнитьЦенуИзРегистра(Элементы.Товары.Текущ иеДанные.Цена,Элементы.Товары.ТекущиеДанные.Номенклатура,Элементы.Контрагент);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘ПолеФормы’

Код:

Кликните здесь для просмотра всего текста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
ВычислитьСуммуСтоимости();
Элементы.Товары.ТекущиеДанные.Цена=ЗаполнитьЦенуИзРегистра(Элементы.Товары.ТекущиеДанные.Цена,Элементы.Товары.ТекущиеДанные.Номенклатура,Элементы.Контрагент);
КонецПроцедуры
 
&НаКлиенте
Процедура ВычислитьСуммуСтоимости()
Если не ПустаяСтрока(Элементы.Товары.ТекущиеДанные.Количество) и не ПустаяСтрока(Элементы.Товары.ТекущиеДанные.Цена) тогда
Элементы.Товары.ТекущиеДанные.Сумма=Элементы.Товары.ТекущиеДанные.Количество*Элементы.Товары.ТекущиеДанные.Цена;
КонецЕсли;
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ЗаполнитьЦенуИзРегистра(Цена, Номенклатура, Контрагент)
Если (ПустаяСтрока(Цена) и не ПустаяСтрока(Номенклатура) и не ПустаяСтрока(Контрагент)) тогда
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныПоставщиковСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныПоставщиков.СрезПоследних(,) КАК ЦеныПоставщиковСрезПоследних
|ГДЕ
| ЦеныПоставщиковСрезПоследних.Контрагент = &Контрагент
| И ЦеныПоставщиковСрезПоследних.Номенклатура = &Номенклатура";
 
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
 
Результат = Запрос.Выполнить().Выбрать();  
Если Результат.Следующий() Тогда
Цена= Результат.Цена;
КонецЕсли;
КонецЕсли;
Возврат Цена;
КонецФункции



0



1904 / 1304 / 465

Регистрация: 16.01.2015

Сообщений: 5,676

02.05.2020, 15:04

2

Лучший ответ Сообщение было отмечено Guildenstern_ как решение

Решение

Цитата
Сообщение от Guildenstern_
Посмотреть сообщение

Элементы.Товары.ТекущиеДанные.Цена

Эта строчка правильно возвращает ЗНАЧЕНИЕ цены в текущей строке.
А вот эта:

Цитата
Сообщение от Guildenstern_
Посмотреть сообщение

Элементы.Контрагент

возвращает ПОЛЕ формы а не его значение. Естественно поле формы НаСервер не передать. Замени на Объект.Контрагент

Добавлено через 3 минуты
И условие :

Цитата
Сообщение от Guildenstern_
Посмотреть сообщение

Если (ПустаяСтрока(Цена) и не ПустаяСтрока(Номенклатура) и не ПустаяСтрока(Контрагент)) тогда

Перенеси в процедуру ПриИзменении НаКлиенте. Сейчас обращение к серверу идет ВСЕГДА, а перенесешь, будет только тогда, когда это необходимо. Быстродействие и загрузка ресурсов железа



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

02.05.2020, 15:04

2

  • Ошибка преобразования dns при авторизации на сервере
  • Ошибка преобразование значения к типу булево не может быть выполнено
  • Ошибка премьер про кодек hevc
  • Ошибка премьер error compiling movie
  • Ошибка превышено время ожидания от сайта