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

1. user1619761 04.03.22 13:39 Сейчас в теме
Доброго времени суток. Пытаюсь с клиента на сервер передать данные текущей строки докуменат, из процедуры КоличествоПриИзменении(Элемент). Вылезает ошибка : ошибка отображения типов: Отсутствует отображение для типа "ДанныеФормыЭлементКоллекции" ...... по причине: ошибка передачи данных между клиентом и сервером. Сначала данные отправлял через ТекущиеДанные.КодТовара, потом попробовал эти данные в массив закинуть, и передать элементы массива, но без результата. Подскажите, пожалуйста, что не так делаю?
МассивПроверяемыхДанных = Новый Массив;
	
	ТекущиеДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
	КодТовара= ТекущиеДанные.КодТовара;
	НомерДокументаПоступления = ТекущиеДанные.ДокументОснование.Код;
	
	МассивПроверяемыхДанных.Добавить(КодТовара);
	МассивПроверяемыхДанных.Добавить(НомерДокументаПоступления );
	
	ПроверкаНаличияНоменклатуры = ПроверитьТекущиеДанныеПоПоступлениямНаСервере(МассивПроверяемыхДанных[0], МассивПроверяемыхДанных[1]);
        МассивПроверяемыхДанных.Очистить();
Показать
По теме из базы знаний
Найденные решения
11. user1619761 04.03.22 16:16 Сейчас в теме
(9) да нет, дело оказалось почему то в этой конструкции
 СтруктураВозврата.Вставить("КодВозврата", Истина);
        СтруктураВозврата.Вставить("ДанныеВозврата", ИскомыеСтроки);
. Там массив строк возвращался , и из за него почему то ошибка , хотя на клиенте массив вроде бы как доступен. Сделе так
 СтруктураВозврата.Вставить("КодВозврата", Истина);
        СтруктураВозврата.Вставить("ДанныеВозврата", Неопределено);
и ошибка пропала.
12. Sashares 33 04.03.22 16:17 Сейчас в теме
(8)
А зачем вот это вот все?

МассивПроверяемыхДанных.Добавить(КодНоменклатуры);
МассивПроверяемыхДанных.Добавить(НомерПроизвЗадания);

СтруктураВозврата = Новый Структура;

ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(МассивПроверяемыхДанных[0], МассивПроверяемыхДанных[1]);


В чем проблема просто параметры передать?

  ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(КодНоменклатуры, НомерПроизвЗадания);


Ошибка у вас потому что вы на клиент возвращаете массив строк.

 ИскомыеСтроки = СписокНоменклатурыПроизвЗадания.НайтиСтроки(ПараметрыОтбора);
    
    Если Не ИскомыеСтроки.Количество() = 0 Тогда
        
        СтруктураВозврата.Вставить("КодВозврата", Истина);
        СтруктураВозврата.Вставить("ДанныеВозврата", ИскомыеСтроки);
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 04.03.22 13:48 Сейчас в теме
(1)
МассивПроверяемыхДанных.Добавить(КодНоменклатуры);

Что за КодНоменклатуры ?
3. user1619761 04.03.22 14:02 Сейчас в теме
(2) тут опечатался, КодТовара там должен быть. Спасибо, поправил.
4. -AI- 04.03.22 14:57 Сейчас в теме
(1)
Вылезает ошибка : ошибка отображения типов: Отсутствует отображение для типа "ДанныеФормыЭлементКоллекции"

ошибка вылезает в момент вызова функции или возврата из неё?

если возврата, то иногда помогает поставить перед параметрами "Знач" в

PS НомерДокументаПоступления = ТекущиеДанные.ДокументОснование.Код;
предоставленный код выполняется на клиенте?
5. user1619761 04.03.22 16:02 Сейчас в теме
(4) ТекущиеДанные.ДокументОснованиеКод, тоже опечатался, там без точки, реквизит в таблчиной части, которому присваивается код документа. Выполняется на клиенте , имеет тип строка. Ошибка вылезает в момент вызова функцию, в саму функцию не заходит.
7. -AI- 04.03.22 16:08 Сейчас в теме
(5) так скопируйте сюда код, что за "вольный пересказ кода"?
8. user1619761 04.03.22 16:09 Сейчас в теме
(7)
&НаКлиенте
Процедура КоличествоПриИзменении(Элемент)
	
	МассивПроверяемыхДанных = Новый Массив;
	
	ТекущиеДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
	КодНоменклатуры = ТекущиеДанные.Артикул;
	НомерПроизвЗадания = ТекущиеДанные.НомерПроизводственногоЗадания;
	
	МассивПроверяемыхДанных.Добавить(КодНоменклатуры);
	МассивПроверяемыхДанных.Добавить(НомерПроизвЗадания);
	
	СтруктураВозврата = Новый Структура;
		
	ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(МассивПроверяемыхДанных[0], МассивПроверяемыхДанных[1]);
	
	Если ПроверкаДанныхПЗ.КодВозврата = Ложь Тогда
		
		Предупреждение(ПроверкаДанныхПЗ.ДанныеВозврата);
		Возврат;
		
	Иначе
		
		
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПроверитьТекущиеДанныеПоПЗНаСервере(КодНоменклатуры, НомерПроизвЗадания)
	
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("НомКод", КодНоменклатуры);
	ПараметрыОтбора.Вставить("НПЗ", НомерПроизвЗадания);
	СтруктураВозврата = Новый Структура;
	
	ИскомыеСтроки = СписокНоменклатурыПроизвЗадания.НайтиСтроки(ПараметрыОтбора);
	
	Если Не ИскомыеСтроки.Количество() = 0 Тогда
		
		СтруктураВозврата.Вставить("КодВозврата", Истина);
		СтруктураВозврата.Вставить("ДанныеВозврата", ИскомыеСтроки);
		
	Иначе
		
		СтруктураВозврата.Вставить("КодВозврата", Ложь);
		СтруктураВозврата.Вставить("ДанныеВозврата", "По текущей номенклатуре нет доступного количества в производственном задании № " + НомерПроизвЗадания);
		
	КонецЕсли;
	
	Возврат СтруктураВозврата;
	
КонецФункции
Показать
12. Sashares 33 04.03.22 16:17 Сейчас в теме
(8)
А зачем вот это вот все?

МассивПроверяемыхДанных.Добавить(КодНоменклатуры);
МассивПроверяемыхДанных.Добавить(НомерПроизвЗадания);

СтруктураВозврата = Новый Структура;

ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(МассивПроверяемыхДанных[0], МассивПроверяемыхДанных[1]);


В чем проблема просто параметры передать?

  ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(КодНоменклатуры, НомерПроизвЗадания);


Ошибка у вас потому что вы на клиент возвращаете массив строк.

 ИскомыеСтроки = СписокНоменклатурыПроизвЗадания.НайтиСтроки(ПараметрыОтбора);
    
    Если Не ИскомыеСтроки.Количество() = 0 Тогда
        
        СтруктураВозврата.Вставить("КодВозврата", Истина);
        СтруктураВозврата.Вставить("ДанныеВозврата", ИскомыеСтроки);
17. -AI- 04.03.22 16:22 Сейчас в теме
(8)
ИскомыеСтроки = СписокНоменклатурыПроизвЗадания.НайтиСтроки(ПараметрыОтбора);

1) зачем нужен серверный вызов?
2) не надо передавать результат НайтиСтроки(),
из СП:
Замечание! Массив хранит ссылки на строки коллекции.
т.е. в массивах ссылка на область памяти, где хранится данные формы,
что вы предлагаете делать с этой ссылкой на клиенте? - там эта инфа лежит в другом месте...

Способ обхода:
сделайте с результатом поиска что хотите на сервере.
либо вызывайте поиск строк на клиенте, и обрабатывайте данные на клиенте...
6. user1619761 04.03.22 16:05 Сейчас в теме
(4) Когда данные меняю на ТСД то ошибка вылезает в момент вызова функции, когда с пк то уже во время возврата.
9. -AI- 04.03.22 16:13 Сейчас в теме
(6) совсем ничего не понимаю.

PS вангую, вы пытаетесь передать ДанныеФормыЭлементКоллекции :)

больше ничего сказать не могу, т.к. кода нет, и контекст вызываемых процедур неизвестен...
11. user1619761 04.03.22 16:16 Сейчас в теме
(9) да нет, дело оказалось почему то в этой конструкции
 СтруктураВозврата.Вставить("КодВозврата", Истина);
        СтруктураВозврата.Вставить("ДанныеВозврата", ИскомыеСтроки);
. Там массив строк возвращался , и из за него почему то ошибка , хотя на клиенте массив вроде бы как доступен. Сделе так
 СтруктураВозврата.Вставить("КодВозврата", Истина);
        СтруктураВозврата.Вставить("ДанныеВозврата", Неопределено);
и ошибка пропала.
14. Sashares 33 04.03.22 16:19 Сейчас в теме
(11)
Там массив строк возвращался , и из за него почему то ошибка , хотя на клиенте массив вроде бы как доступен.

То что массив доступен не значит что через него можно передавать те типы, которые не передаются с клиента на сервер.
18. -AI- 04.03.22 16:25 Сейчас в теме
(11) ежё понятно, что если всё заменить на Неопределено, то всё будет замечательно передаваться.

PS и всё же проблема была не в вызове функции, а в её возврате, как я и говорил в самом начале.
19. user1619761 04.03.22 16:28 Сейчас в теме
(18) Согласен, проблема была в возврате. Но при отладке с ТСД в функцию даже не заходил отладчик, по этой причине я и считал, что при вызове ошибка.
20. -AI- 04.03.22 16:46 Сейчас в теме
(19) у вас отладка на сервере не работает., потому и не заходит туда.
10. dehro 12 04.03.22 16:16 Сейчас в теме
        ТекущиеДанные = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные;
        КодНоменклатуры = ТекущиеДанные.Артикул;
	НомерПроизвЗадания = ТекущиеДанные.НомерПроизводственногоЗадания;
       ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(КодНоменклатуры , НомерПроизвЗадания);
13. user1619761 04.03.22 16:17 Сейчас в теме
(10) Изначально я так и делал, а точнее
 ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(ТекущиеДанные.Артикул, ТекущиеДанные.НомерПроизводственногоЗадания);
. Но от ошибки уже избавился в (11) . Спасибо.
15. user1619761 04.03.22 16:21 Сейчас в теме
(12) Да, я уже это понял, написал в (11) . А это
МассивПроверяемыхДанных.Добавить(КодНоменклатуры);
МассивПроверяемыхДанных.Добавить(НомерПроизвЗадания);

СтруктураВозврата = Новый Структура;

ПроверкаДанныхПЗ = ПроверитьТекущиеДанныеПоПЗНаСервере(МассивПроверяемыхДанных[0], МассивПроверяемыхДанных[1]);
была попытка, я думал что ошибка из за ПроверитьТекущиеДанныеПоПЗНаСервере(ТекущиеДанные.Артикул, ТекущиеДанные.НомерПроизводственногоЗадания). Спасибо.
16. user1619761 04.03.22 16:21 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот