Имя: Пароль:
1C
1С v8
8.3. УФ. Нарвался на ошибку, не понимаю причины.
0 Target1025
 
22.04.22
15:16
Делаем полеВвода1 тип СправочникСсылка.Сотрудники:
https://ibb.co/Q6GnMf6
Делаем событие ПолеВвода1ПриИзменении:
https://ibb.co/cTq1b0x

Автоматически сгенерировался код модуля Формы:
https://ibb.co/zPGkYcw

Из предприятия, при выборе сотрудника все крашится с такой ошибкой:


Ошибка отображения типов:
Отсутствует отображение для типа 'ЭлементСпискаЗначений'
{ВнешняяОбработка.АктИнвентаризацииНаличных.Форма.Форма.Форма(60)}:    ПолеВвода1ПриИзмененииНаСервере();
{Справочник.Сотрудники.Форма.ФормаСписка.Форма(521)}:                ОповеститьОВыборе(СписокЗначений[0]);

по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'valList':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/logform}valList
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'value':
    форма: Элемент
    имя: {http://v8.1c.ru/8.1/data/core}value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ЭлементСпискаЗначений'



Эм, не могу понять, что сделано не так?
1 lubitelxml
 
22.04.22
15:22
"СписокЗначений[0]" - что за значение в отладчике, какой тип? Ты передаешь что-то не то
2 Лирик
 
22.04.22
15:32
(0) У тебя форма выбора сотрудника возвращает не СправочникСсылку, а элемент списка значений. Посмотри как в существующих документах реализован выбор сотрудников и сделай аналогично.
3 Target1025
 
22.04.22
15:35
(1) Это значение возвращает Справочник.Сотрудники.ФормаСписка в коде СписокВыборЗначения:
&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Если ТипЗнч(Значение) = Тип("Массив") Тогда
        СписокЗначений = Значение;
    Иначе
        СписокЗначений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение);
    КонецЕсли;
    
    Если СписокЗначений.Количество() > 0 Тогда
        
        Если Элементы.Список.МножественныйВыбор Тогда
            
            ОбновитьСписокПодобранных(СписокЗначений);
            Если СписокЗначений.Количество() > 1 Тогда
                Закрыть();
            КонецЕсли;
            
        Иначе
            
            Если СписокПодобранных.НайтиПоЗначению(СписокЗначений[0]) = Неопределено Тогда
                ОповеститьОВыборе(СписокЗначений[0]); // <---- тут
            Иначе
                Закрыть();
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Возвращает оно тип значения "СправочникСсылка.Сотрудники".
4 Жан Пердежон
 
22.04.22
15:40
(3) это тебе так хочется, там тип значения другой
5 Жан Пердежон
 
22.04.22
15:47
>> Отсутствует отображение для типа 'ЭлементСпискаЗначений'
тебе даже текст ошибки об этом явно говорит
6 Target1025
 
22.04.22
16:13
(0)(1)(2)(4)

В общем, удивительный глюк проги, который слабо объясним. Итак, где был прикол?


&НаКлиенте
Процедура ПриОткрытии(Отказ)

    СЗ = Новый СписокЗначений;
    СЗ.Добавить("приказ");
    СЗ.Добавить("постановление");
    СЗ.Добавить("распоряжение");
    
    СписокВыбора = Элементы.ПолеВвода7.СписокВыбора;
    СписокВыбора.Очистить();
    Для Каждого Значение Из СЗ Цикл
        СписокВыбора.Добавить(Значение);
    КонецЦикла;    
КонецПроцедуры


Процедура заполняет список выбора у полеВвода7, что есть строка, в момент открытия. Заполняло таким вот образом. Открывалось без вопросов, работало без вопросов. Но начали сыпаться другие поля ввода, справочников сотрудники, что отражено в (0). Как оно так портило форму, непонятно, но проблема была решена тем, что список выбора был забит прямо в ПолеВвода7:
https://ibb.co/rbfxbrm
7 hhhh
 
22.04.22
16:39
объяснили же  


Для Каждого ЭлементСЗ Из СЗ Цикл
        СписокВыбора.Добавить(ЭлементСЗ.Значение);
    КонецЦикла;
8 Target1025
 
22.04.22
16:53
(7) "объяснили же"
Нет. Мне объясняли, что ошибка тут:

{ВнешняяОбработка.АктИнвентаризацииНаличных.Форма.Форма.Форма(60)}:    ПолеВвода1ПриИзмененииНаСервере();
Справочник.Сотрудники.Форма.ФормаСписка.Форма(521)}:                ОповеститьОВыборе(СписокЗначений[0]);

Но ошибка была вообще в другом месте, в другом поле ввода данных, не связанных с вышеупомянутым ПолеВвода1. Западло в том, что форму портило ПолеВвода7, строка, при этом сам список ПолеВвода7 на форме работал перфектно.

Ситуация выглядит так, что это ошибка платформы. Надо бы в баги отписать.
9 Жан Пердежон
 
22.04.22
16:55
(6) что действительно слабо объяснимо так это зачем давать мудацкие имена переменным/реквизитам/элементам формы
ПолеВвода1, ПолеВвода2..., переменная "СписокЗначений" (когда в ней хранишь массив...)?
10 1Сергей
 
22.04.22
17:13
СписокЗначений зарезервированное слово
11 Target1025
 
22.04.22
17:52
(9) "о действительно слабо объяснимо так это зачем давать мудацкие имена переменным/реквизитам/элементам формы" Очень просто объяснимо. Отчет переделывается на УФ с двойки, с ОФ. В такой ситуации переименывывать себе поля - стрелять самому себе прямо в ногу.
"переменная "СписокЗначений" (когда в ней хранишь массив...)?" - в переменной СЗ, хранился СписокЗначений. Массивов там ни одного не было.

(10) Используется СЗ, СЗ - не СписокЗначений.
12 lubitelxml
 
22.04.22
17:55
(11) "ОповеститьОВыборе(СписокЗначений[0]); " - где здесь СЗ?
(11) "переименывывать себе поля - стрелять самому себе прямо в ногу. "  - "давать мудацкие имена переменным/реквизитам/элементам формы ПолеВвода1, ПолеВвода2..., переменная "СписокЗначений"" - это сразу выстрел в голову
13 Target1025
 
23.04.22
03:41
(12) Это код из "справочник.Сотрудники". В списке значений лежит ссылка на элемент справочника. Это стандартный механизм передачи данных из формы выбора справочника "Сотрудники" туда, откуда его попросили.

"давать мудацкие имена" - да, я не спорю. Поэтому в _моих_ обработках все именуется предельно четко. Просто данный отчет переделывался на УФ с ОФ с двойки на тройку, и если я, кроме цирка с УФ еще буду бизнес-логику отчета ломать, то я тупо потрачу в 3 раза больше времени.
14 hhhh
 
23.04.22
04:35
(13) надо СписокЗначений[0].Значение

потому что СписокЗначений[0]  это элемент списка значений, у него есть поля Пометка, Значение, Представление.

и СписокЗначений[0].Значение - это и будет как раз ссылка на элемент справочника.
15 Жан Пердежон
 
23.04.22
06:57
(13) а теперь открой синтакс-помощник и почитай что такое список значений и как с ним работать (за 3 года уже можно сделать)
16 Target1025
 
23.04.22
11:33
(14)(15) штож вы трудние такие! =) То, на что вы мне указываете - это родной код 1с из справочника Сотрудники, форма списка. Вот полный текст модуля:

&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Если ТипЗнч(Значение) = Тип("Массив") Тогда
        СписокЗначений = Значение;
    Иначе
        СписокЗначений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение);
    КонецЕсли;
    
    Если СписокЗначений.Количество() > 0 Тогда
        
        Если Элементы.Список.МножественныйВыбор Тогда
            
            ОбновитьСписокПодобранных(СписокЗначений);
            Если СписокЗначений.Количество() > 1 Тогда
                Закрыть();
            КонецЕсли;
            
        Иначе
            
            Если СписокПодобранных.НайтиПоЗначению(СписокЗначений[0]) = Неопределено Тогда
                ОповеститьОВыборе(СписокЗначений[0]);
            Иначе
                Закрыть();
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры


Я фик знает, зачем 1с вкидывает в переменную СписокЗначений значение типа "Массив", но это их трудности. В моем случае, "стреляло" не в этом месте. "Стреляло" на моей форме, в совсем другом поле ввода данных, типа "строка" с выбором из списка значений.
17 lubitelxml
 
23.04.22
15:48
(16)
    Если ТипЗнч(Значение) = Тип("Массив") Тогда
        СписокЗначений = Значение;
    Иначе
        СписокЗначений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение);
    КонецЕсли;
Ты сам проверяешь - если это Массив.
18 Target1025
 
24.04.22
01:00
(17) Сцуко! ЭТО РОДНОЙ КОД 1Са! Уже 4й раз пишу! Открой бухию, форма списка справочника сотрудники, строка 510, ты увидишь этот код. ;-))))))))))
19 hhhh
 
24.04.22
16:39
(18) а в ОбновитьСписокПодобранных что?
20 Мимохожий Однако
 
24.04.22
17:59
Давно пора почитать про отладчик и посмотреть, какие значения попадают в параметры процедур
21 nicxxx
 
24.04.22
20:38
(9) Ну какое тебе дело до того, как человек называет переменные? Он просит помощи с конкретной проблемой, а не приходит и говорит "поучите меня жить пожалуйста". Если сказать по существу нечего, зачем вообще отвечаешь? Скучно?
22 DrZombi
 
гуру
24.04.22
21:47
(16) Ну и ладно... Картинки недоступны, это еще мелкий глюк.
Вот когда у тебя Запрос 1С не отрабатывает на сервере SQL с невнятной ошибкой... Вот это глюк :)
23 Жан Пердежон
 
27.04.22
12:33
(18) (21) на конкретную проблему ему ещё в (1) указали (и это помимо текста самой ошибки)
А судя по (6) ТС так и не понял в чем ошибка
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.