| 
    
        
     
     | 
    
    
  | 
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) ТС так и не понял в чем ошибка  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |