Имя: Пароль:
1C
 
Ошибка передачи данных между клиентом и сервером.
0 Новый1сник2
 
23.10.23
11:13
Добрый день!

есть задача заполнить аналоги номенклатуры из другой номенклатуры.

выдает ошибку:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Текст: 857222d0-d963-11eb-baab-d45d64515876
1 Новый1сник2
 
23.10.23
11:14
&НаСервере
Процедура мАналогиНоменклатурыНоменклатураЗаполнитьНаСерверре(Номенклатура)
    
    Номенклатура = Номенклатура.ПолучитьОбъект();  
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    НоменклатурамАналогиНоменклатуры.Номенклатура КАК Номенклатура
        |ИЗ
        |    Справочник.Номенклатура.мАналогиНоменклатуры КАК НоменклатурамАналогиНоменклатуры
        |ГДЕ
        |    НоменклатурамАналогиНоменклатуры.Ссылка = &Ссылка";
    
    Запрос.УстановитьПараметр("Ссылка", Номенклатура.Ссылка);
      
    Массив1 = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура");
    
    Массив2 = Объект.мАналогиНоменклатуры.Выгрузить().ВыгрузитьКолонку("Номенклатура"); //Массив текущей номенклатуры
    
    Для каждого Элемент Из Массив1 Цикл
        Если Массив2.Найти(Элемент) = Неопределено Тогда
            Массив2.Добавить(Элемент);
        КонецЕсли;
    КонецЦикла;
    
    Массив2.Добавить(Объект.Ссылка);

    Для Каждого ТекСтрока из Массив2 Цикл
        
        Если ТекСтрока.Ссылка <> Объект.Ссылка и ТекСтрока.Ссылка <> Номенклатура.Ссылка ТОгда
            
            НовСтрока = Объект.мАналогиНоменклатуры.Добавить();
            НовСтрока.Номенклатура = ТекСтрока.Ссылка;
            
        КонецЕсли;
    КонецЦикла;  

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

&НаКлиенте
Процедура мЗаполнитьАналоги(Команда)
    ТекСтрока = Элементы.мАналогиНоменклатуры.ТекущиеДанные;
    мАналогиНоменклатурыНоменклатураЗаполнитьНаСерверре(ТекСтрока.Номенклатура);
    
КонецПроцедуры
2 Новый1сник2
 
23.10.23
11:15
сначала на таблицу значений ругалось, переделал на массивы,
ошибка осталась, не могу понять что передается на клиент
3 Donkey_hot
 
23.10.23
11:22
(1) Загадочный код. Допустим даже все отработало: ну набили Вы табличную часть объекта какими-то аналогами, все равно ведь не записываете. Что касается ошибки, попробуйте выбрать другое имя переменной для результата вызова Номенклатура.ПолучитьОбъект(). Либо передавайте параметр по значению.
4 Fedor-1971
 
23.10.23
11:24
(2) точно, точно на ТЗ ругалось? Переменная "Элемент" так-то может перекрыть элемент формы

и, это, Номенклатура = Номенклатура.ПолучитьОбъект() - зачем тебе Объект номенклатуры, если используешь только ссылку?
5 Новый1сник2
 
23.10.23
11:25
(3) благодарю, ошибка как раз в названии переменной была
6 Donkey_hot
 
23.10.23
11:26
(4) Да нет, здесь же видно, что параметру Номенклатура присваивается значение СправочникОбъект, а вернуть его на клиент несколько затруднительно.
7 Fedor-1971
 
23.10.23
11:32
(6) Не должно, на клиент от объекта поедет ссылка
А поломанный Элемент - точно не приедет на клиента
9 Новый1сник2
 
23.10.23
11:39
(7) Элемент тоже переименовал на всякий случай
10 Donkey_hot
 
23.10.23
11:55
(7) Да нет, объект и поедет. Не бывает таких неявных преобразований. Что присвоили, то и поедет.
11 Fedor-1971
 
23.10.23
12:47
(10) Уже перепроверил, едет объект целиком
12 Рэйв
 
23.10.23
12:52
Номенклатура = Номенклатура.ПолучитьОбъект();  
а потом
Запрос.УстановитьПараметр("Ссылка", Номенклатура.Ссылка);
Это конечно вершина мыслительного процесса:-))
13 Новый1сник2
 
23.10.23
13:22
(12) 👍