Ошибка отображения типов отсутствует отображение для типа интернетпочтовыйпрофиль

Классика: Ошибка отображения типов: Отсутствует отображение для типа

Я

  

TrueBuild

26.02.22 — 00:00

Пытаюсь открыть одну форму из другой, передавая туда параметры. В параметрах только ссылки и простые типы, никакие таблицы значений не передаю:

https://disk.yandex.ru/i/bTk0282HaaGC2Q

https://disk.yandex.ru/i/Y2undFzJ11HVSQ

Получаю ошибку:

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

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

Не могу понять, что не так?

Причем процедура ПриСозданииНаСервере() открываемой формы отрабатывает без ошибок. Ошибка возникает, когда вызов возвращается в ОткрытьФорму().

Подскажите, что делаю не так, в чем ошибка?

  

vicof

1 — 26.02.22 — 00:12

А 1ска говорит, что передаешь

  

МихаилМ

2 — 26.02.22 — 00:15

(0) Почитайте раздел рекомендации правил форума.

  

TrueBuild

3 — 26.02.22 — 00:34

(1) Поэтому и не понимаю, где ошибка. Вижу, что говорит, но так же вижу и в отладке, что я передаю — см. 2 скриншот, там ТЗ нет, только ссылки и простые типы.

(2) Если вы про поиск, то, естественно, им пользовался, ответа на свой вопрос не нашел.

  

H A D G E H O G s

4 — 26.02.22 — 00:50

(0) Ты ТаблицуЗначений в каком то из параметров возвращаешь с сервера. Скинь конфигу

  

TrueBuild

5 — 26.02.22 — 01:14

(4) По завершению процедуры ПриСозданииНаСервере, когда вызов возвращается обратно на клиент, в параметрах так же нет никакой ТЗ, так же только ссылки и простые типы:

https://disk.yandex.ru/i/qezDhmDrPg1Mjg

  

H A D G E H O G s

6 — 26.02.22 — 02:33

(5) Скинь Cf на liveups@yandex.ru

  

pechkin

7 — 26.02.22 — 07:30

Тз это не реквизит формы?

  

МимохожийОднако

8 — 26.02.22 — 07:59

Вместо ТЗ надо передавать массив.

  

SuperMario

9 — 26.02.22 — 09:11

>> Причем процедура ПриСозданииНаСервере() открываемой формы отрабатывает без ошибок. Ошибка возникает, когда вызов возвращается в ОткрытьФорму()

Значит скрины не актуальны. Вы нас в заблуждение ими вводите.

«Курите» код по всем событиям в открываемой форме , начина с ПриСозданииНаСервере()

  

SuperMario

10 — 26.02.22 — 09:12

Вы с сервера на клиент в уже откываемой форме что-то универсальное передаете.

  

TrueBuild

11 — 26.02.22 — 09:31

Всем спасибо, разобрался, проблема оказалась в другом. (5) Вот тут на скрине полностью не видно, но в открываемой форме я создаю ТЗ и пытаюсь передать ее в качестве параметра в динамический список, чего, оказывается делать нельзя.

Ввело в заблуждение то, что исключение вызывалось после вызова ОткрытьФорму(), а само создание формы (ПриСозданииНаСервере) отрабатывало без ошибок.

  

ДедМорроз

12 — 26.02.22 — 14:24

ТаблицуЗначений передать с сервера на клиента нельзя.

Как ни странно,но создать ТЗ можно в толстом клиенте и с ухищрениями в тонком,а передать нельзя,так как ограничение искуственное.

  

acht

13 — 26.02.22 — 16:07

(12) > и с ухищрениями в тонком

Веб клиент — достаточно тонкий?

  

ДедМорроз

14 — 26.02.22 — 19:56

Есть несколько видов клиентов:

Толстый клиент,

Тонкий клиент,

Web-клиент,

Мобильный клиент.

В последних двух никакого намека на таблицу значений,так как ее там никогда не было.

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

Автор mahaidor, 17 апр 2014, 17:22

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

Здравствуйте.Платформа 1с 8.3.437 . Выгружаю результат запроса в таблицу значений, в ответ возникает ошибка отображение типов: отсутствует отображение типа ValueTable.

&НаКлиенте
Процедура Ант_Вес_РостПриИзменении(Элемент)
Возраст=СТрока(Объект.Возраст);
Пол=Объект.Пол;
//обращение к табличной чати
СтрТабЧ=Элементы.Ант_Вес_Рост.ТекущиеДанные;
СтрокаВыборки=ВыборРезультатаЗапросаРоста(Возраст,Пол);

//СтрТабЧ.ОценкаРоста=ВыборРезультатаЗапроса(Возраст,Пол);

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

&НаКлиенте
Функция ВыборРезультатаЗапросаРоста(Возраст,Пол)
Рез=ВыборСтрокиКритериевРоста(Возраст,Пол);
Возврат Рез;
КонецФункции

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

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


Да действительно нельзя передавать таблицу значений с сервера на клиент. Мутабельные переменные не передаются между серверным и клиентским контекстом. Попробуйте максимально перенести логику выполнения на сервер, а  на клиенте получайте уже готовый результат.

Так же можно использовать временное хранилище для передачи таких значений.


Цитата: MuI_I_Ika от 17 апр 2014, 19:17
Да действительно нельзя передавать таблицу значений с сервера на клиент. Мутабельные переменные не передаются между серверным и клиентским контекстом. Попробуйте максимально перенести логику выполнения на сервер, а  на клиенте получайте уже готовый результат.

Так же можно использовать временное хранилище для передачи таких значений.

То есть вы имеете ввиду, что можно использовать объект «Хранилище значений» для передачи таблицы значений?


Не ХранилищеЗначений, а временное хранилище — серверный объект, как раз применяющийся для передачи данных с сервера на клиент. Поищите примеры, как в управляемом приложении реализован подбор товаров.

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


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

&НаКлиенте
Процедура Ант_Вес_РостПриИзменении(Элемент)
Возраст=СТрока(Объект.Возраст);
Пол=Объект.Пол;
//обращение к табличной чати
СтрТабЧ=Элементы.Ант_Вес_Рост.ТекущиеДанные;
Рост=СтрТабЧ.Рост;
СтрТабЧ.ОценкаРоста=ВыборКритерияРоста(Возраст,Пол,Рост);
КонецПроцедуры

&НаСервере
Функция  ВыборКритерияРоста(Возраст,Пол,Рост)
//Запрос на получение строки критериев роста согласно полу и возрасту
Запрос=Новый Запрос;//создаем новый запрос
Запрос.Текст=      //вводим содержание запроса
"ВЫБРАТЬ             
| КритерийРоста.Р_1,
| КритерийРоста.Р_2,
| КритерийРоста.Р_3,
| КритерийРоста.Р_4,
| КритерийРоста.Р_5,
| КритерийРоста.Р_6
| ИЗ Справочник.ТаблицаРоста КАК КритерийРоста
|ГДЕ КритерийРоста.Наименование=&Возраст и КритерийРоста.Пол=&Пол";
Запрос.УстановитьПараметр("Возраст",Возраст);//вводим в запрос значениие возраста
Запрос.УстановитьПараметр("Пол",Пол);  //вводим в запрос значениие пола
     РезультатЗапроса = Запрос.Выполнить(); //выполениеие запроса
//обработка результатов запроса
ТблЗн=РезультатЗапроса.Выгрузить();//выгружаем результаты запроса в таблицу значений для обработки в ней данных
Для Каждого СтрокаТблЗн из ТблЗн Цикл //запускаем цмкл обработки данных в таблице значений
//определение критерия очень низкого роста
Если СтрокаТблЗн.Р_1>Рост Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Очень_низкий; КонецЕсли;
  //определение критерия низкого роста
Если ((СтрокаТблЗн.Р_1=Рост) или (СтрокаТблЗн.Р_1<Рост))
    И (СтрокаТблЗн.Р_2>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Низкий; КонецЕсли;
  //определение критерия  роста ниже среднего
Если ((СтрокаТблЗн.Р_2=Рост) или (СтрокаТблЗн.Р_2<Рост))
И (СтрокаТблЗн.Р_3>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Ниже_Среднего; КонецЕсли;
  //определение критерия среднего роста
Если ((СтрокаТблЗн.Р_3=Рост) или (СтрокаТблЗн.Р_3<Рост))
И (СтрокаТблЗн.Р_4>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Средний; КонецЕсли;
    //определение критерия  роста выше среднего
Если ((СтрокаТблЗн.Р_4=Рост) или (СтрокаТблЗн.Р_4<Рост))
И (СтрокаТблЗн.Р_5>Рост) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Выше_Среднего; КонецЕсли;
     //определение критерия высокого роста
Если ((СтрокаТблЗн.Р_5=Рост) или (СтрокаТблЗн.Р_5<Рост))
И ((СтрокаТблЗн.Р_6>Рост)или (СтрокаТблЗн.Р_6=Рост)) Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Высокий; КонецЕсли;
     //определение критерия очень высокого роста
Если (СтрокаТблЗн.Р_6<Рост)  Тогда КритерийРоста=Перечисления.Критерии_Рост_Вес.Очень_Высокий; КонецЕсли;
КонецЦикла;
  Возврат  КритерийРоста;
КонецФункции


Вопрос решен, всем спасибо.


Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’

Описание ошибки:
Ошибка при программировании, конфигурировании кода в 1С 8:

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

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

1C 8 Ошибка отображения типов: Отсутствует отображение для типа ЭлементСпискаЗначений,

Нажатие на изображении увеличит его
1C 8, Отсутствует отображение для типа ЭлементСпискаЗначений, по причине, ошибка передачи данных между клиентом и сервером, значение недопустимого типа

Возникла при написании кода индивидуальной конфигурации. Но, как оказалось, может подстерегать программиста из-за его невнимательности и при конфигурировании в других конфигурациях. Итак, в чем же причина возникновения данной ошибки. В управляемой форме был создан реквизит типа «СписокЗначений». При открытии формы по коду срабатывает обработчик заполнения этого списка значений. Т.е. в коде создается переменная с помощью конструктора «Новый СписокЗначений», значение которой потом и устанавливается реквизиту формы. Но, перед тем как это происходит, в коде список значений изменяется — в частности выполняется его дополнительная сортировка. Конечно, ошибка «Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’» может возникнуть у Вас не только в такой ситуации. Сейчас разберемся в чем ее суть.

1С 8, Ошибка для типа ЭлементСпискаЗначений, передачи данных между клиентом и сервером, значение недопустимого типа, по причине, ошибка преобразования данных XDTO

Как было отмечено в этой частной задаче выполняется сортировка исходного заполненного списка значений. Но, т.к. в этой частной задаче не подходило использование метода «СортироватьПоЗначению(<Направление>)«, т.к. сортировка более сложная (по текстовым данным с разделителями порядка, содержащих разделитель «.», пример: 1.1, 2.2, 2.2.1, 2.2.2, 3.1, 3.2, 3.3.1, 3.3.2). Поэтому сортировка выполнялась программно с созданием новой переменной типа «СписокЗначений» и ее заполнением по данным исходного списка.

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

Нажатие на изображении увеличит его

1C 8, как устранить, исправить ошибку, ошибка преобразования данных XDTO, отсутствует отображение для типа ЭлементСпискаЗначений

Не смотря на то, что в методической информации «Синтакс-помощника» 1С 8 указано, что значение элемента списка значений может быть любым (произвольным), все-таки для случая использования в управляемой форме в качестве реквизита накладывается ограничение по типу. И нельзя в значение такого списка значений поместить «ЭлементСискаЗначений» другого списка значений.

1С 8, какие значения могут быть у списказначений, исключения для управляемой формы

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

Нажатие на изображении увеличит его

Было выполнено исправление в коде для обращения к значениям и передачи их в качестве значений нового списка значений. 

Нажатие на изображении увеличит его
1С 8, в чем причина ошибки в форме, отсутствует отображение для типа Элемент списка значений, ошибка отображения типов

В данном случае значениями списка были значения примитивного тип «Строка», поэтому дальнейшая работа доработанного кода стала возможной. И это все-таки позволило реализовать задачу. Если у Вас будут другие типы, например ссылки, то продумывайте заранее, как будете упорядочить, возможно придется через другие универсальные объекты, например использование таблицы значений, и потом заполнять конечный список значений. Другие примитивные типы не проверялись, но предполагаю, что они так же подойдут для корректной работы в управляемой форме. в качестве значений списка. Поэтому учитывайте это, если столкнетесь с данной ошибкой при Вашем конфигурировании — подбирайте по возможности простой тип для значений списка.

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

Таким образом на примере данной частной ситуации возникновения ошибки при конфигурировании в 1С 8 «Отсутствует отображение для типа ЭлементСпискаЗначений, по причине, ошибка передачи данных между клиентом и сервером, значение недопустимого типа» извлекаем вывод о том, что нужно быть внимательным и не заполнять значения объекта «Список значений» элементами другого списка значений. А передавать значения элемента списка значений, если одна переменная типа «СписокЗначений» заполняется за счет другой подобной.

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




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

16-03-2022

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

RUBYX

0 / 0 / 0

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

Сообщений: 39

1

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

10.05.2022, 09:53. Показов 1068. Ответов 5

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


Еще раз всем здравствуйте! Когда пытаюсь обменяться данными между мобильной и основной центральной базой, почему то выходит ошибка отображения типов: Отсутствует отображение для типа ‘ТаблицаЗначений'{Справочник.Пьесы.Форма.ФормаСпис ка.Форма}. Данные появляются в центральной базе после добавления данных в мобильной базе, но вот ошибка меня смущает

Сам код вот (Мобильная платформа)

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 &НаСервере
Процедура ПолучитьПьесы()
    Попытка
        HTTPСоединение=Новый HTTPСоединение("192.168.43.241",,,,,30);   
        HTTPЗапрос=Новый HTTPЗапрос("/CenterMaxServer/hs/HTTPEx");  
        HTTPЗапрос.Заголовки.Вставить("Content-Type","text/html; charset=utf-8;");
        ОтветСервера=HTTPСоединение.Получить(HTTPЗапрос);
        Если ОтветСервера.КодСостояния=200 Тогда
            ДанныеСервера=Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));  
            Для Каждого СтрокаСервер Из ДанныеСервера Цикл 
                Пьеса=Справочники.Пьесы.НайтиПоНаименованию(СтрокаСервер.Наименование);
                Если Пьеса.Пустая() Тогда     
                Пьеса=Справочники.Пьесы.СоздатьЭлемент(); 
                Пьеса.Наименование=СтрокаСервер.Наименование;  
            Иначе                                              
                Пьеса=Пьеса.ПолучитьОбъект();
                            КонецЕсли; 
                Пьеса.Записать(); 
                            КонецЦикла;
        Иначе
            Попытка
                Сообщить(Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8")));
            Исключение
                Сообщить(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));
                КонецПопытки;
            КонецЕсли;
    Исключение
            Сообщить("Возникла проблема с интернетом");
    КонецПопытки;
КонецПроцедуры
 
 &НаСервере
Функция Сериализовать(ТелоJSON)
    ЗаписьJSON=Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    СжатыйОбъект=Новый ХранилищеЗначения(ТелоJSON, Новый СжатиеДанных(9));
    СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, СжатыйОБъект);
    Возврат СтрЗаменить(ЗаписьJSON.Закрыть(),"#","_РЕШЕТКА_");
КОнецФункцИИ
 
 &НаСервере
Функция Десериализовать(СтрокаJSON)
    ЧтениеJSON=Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрЗаменить(СтрокаJSON,"_РЕШЕТКА_","#"));
СЖатыйОбъект=СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON, Тип("ХранилищеЗначения"));
ЧтениеJSON.Закрыть();
Возврат СжатыйОбъект.Получить();
КОнецФУНКциИ
 
&НаКлиенте
Процедура Обновить(Команда)
    ПолучитьПьесы();
КонецПроцедуры
 
 &НаСервере
Функция ПолучитьРезультатВБазе()
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Пьесы.Наименование КАК Наименование
        |ИЗ
        |   Справочник.Пьесы КАК Пьесы";
    СтрТела = Запрос.Выполнить().Выгрузить();  
    Попытка
        HTTPСоединение=Новый HTTPСоединение("192.168.43.241",,,,,30);   
        HTTPЗапрос=Новый HTTPЗапрос("/CenterMaxServer/hs/HTTPEx/plays");  
        HTTPЗапрос.Заголовки.Вставить("Content-Type","text/html; charset=utf-8;");  
        HTTPЗапрос.УстановитьТелоИзСтроки(Сериализовать(СтрТела));
        ОтветСервера=HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
        Если ОтветСервера.КодСостояния=200 Тогда
            Возврат Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));  
            Иначе
            Попытка
                Сообщить(Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8")));
            Исключение
                Сообщить(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));
                КонецПопытки;
            КонецЕсли;
    Исключение
            Сообщить("Возникла проблема с интернетом");
        КонецПопытки;  
        КонецФункции 
            
&НаКлиенте
        Процедура ОтправитьДанные(Команда)
            ПолучитьРезультатВБазе();
        КонецПроцедуры

Если нужна дополнительная информация могу потом прикрепить или выгрузку обеих баз дать. Заранее спасибо

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

260 / 216 / 94

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

Сообщений: 1,334

10.05.2022, 15:52

2

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

Решение

ПолучитьРезультатВБазе() почему это функция? Значение возврата то на клиенте нигде не используется
Если ОтветСервера.КодСостояния=200 Тогда
Возврат Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку («UTF8»));
Вот тут возможно летит мутабельное значение .

1

0 / 0 / 0

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

Сообщений: 39

10.05.2022, 18:29

 [ТС]

3

Вроде когда я писал «процедура», то мне ошибку выдавало, что нельзя использовать в процедуре или что-то типо такого, да и мы это по инструкционке делаем)

Добавлено через 17 минут
Кстати спасибо, я просто удалил эту строку и все работает как надо!)

0

260 / 216 / 94

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

Сообщений: 1,334

10.05.2022, 18:51

4

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

то мне ошибку выдавало, что нельзя использовать в процедуре

Верно.Процедура не может возвращать значение.

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

Кстати спасибо, я просто удалил эту строку и все работает как надо!)

Ну возможно оно где-то и должно использоваться.Тут вариант что результат должен возвращаться в процедуру с директивой «НаСервере» и обрабатываться,и предаваться на клиент в виде «простого типа».

1

0 / 0 / 0

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

Сообщений: 39

10.05.2022, 19:04

 [ТС]

6

Всем спасибо еще раз!

0

 +2 

Распечатать

Как получить и отправить почту? (ИнтернетПочта, ИнтернетПочтовыйПрофиль, ИнтернетПочтовоеСообщение)

Отправка

Код 1C v 8.2 УП

 // отправка почтового сообщения...
Профиль = новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПользовательSMTP = "111";
Профиль.ПарольSMTP = "222222"; //
ПРофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;

Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель = "121@yandex.ru";
Сообщение.Тема = ""+ПрефиксФилиала;
Сообщение.Получатели.Добавить("12321@yandex.ru");
Сообщение.Тексты.Добавить(ТекстПисьма);
Сообщение.Вложения.Добавить(ИмяВременногоZiPфайла);

Почта = Новый ИнтернетПочта;
Попытка
Состояние("Отправка почтового сообщения...");
Почта.Подключиться(Профиль);
Почта.Послать(Сообщение);
Предупреждение("Сообщения успешно отправлены!");
Исключение
Сообщить("Ошибка соединения с сервером.",СтатусСообщения.ОченьВажное);
Сообщить(""+ОписаниеОшибки());
КонецПопытки;

Получение

Код 1C v 8.2 УП

 Профиль = новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераPOP3 = "pop3.yandex.ru";
Профиль.Пользователь = "121";
Профиль.Пароль = "12321";
ПРофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная;

Попытка
Предупреждение("Попытка подключения к серверу почты "+Профиль.АдресСервераPOP3);
Состояние("Подключение к серверу "+Профиль.АдресСервераPOP3);
Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);

МассивСообщений = Новый Массив;
Предупреждение("Чтение почтовых сообщений");
Состояние("Чтение почтовых сообщений...");
МассивСообщений = Почта.Выбрать(Ложь); // ЛОжь - письма с сервера не удаляются...
Исключение
Предупреждение("Ошибка подключения к серверу ","Остановить");
Предупреждение(""+ОписаниеОшибки(),"Остановить");
Сообщить("Ошибка подключения к серверу!");
Сообщить(""+ОписаниеОшибки());
Возврат;
КонецПопытки;

Если МассивСообщений.Количество() = 0 Тогда
Предупреждение("В почтовом ящике нет сообщений. Прерываем работу.");
Сообщить("Почтовый ящик пуст");
ПолученныеПисьма.Очистить();
Возврат;
КонецЕсли;
ОтобразитьПочтовыеПисьма();
КонецПроцедуры

Процедура ОтобразитьПочтовыеПисьма()
ПолученныеПисьма.Очистить();
Если МассивСообщений.Количество() = 0 Тогда
Возврат; // почтовых сообщений нету.
КонецЕсли;

Предупреждение("Начало отображения сообщений в обработке");
МассивСообщенийОбмена = новый Массив;

ИмяФайлаСообщения = "";
ПолученныеПисьма.Очистить();
Для Индекс = 0 По МассивСообщений.Количество() - 1 Цикл
стр = ПолученныеПисьма.Добавить();
стр.ДатаОтправления = МассивСообщений[Индекс].ДатаОтправления;
стр.ЗаголовокСообщения = МассивСообщений[Индекс].Заголовок;
стр.Индекс = Индекс;
стр.КоличествоВложений = МассивСообщений[Индекс].Вложения.Количество();
стр.КоличествоТекстов = МассивСообщений[Индекс].Тексты.Количество();
стр.Размер = МассивСообщений[Индекс].Размер;
стр.Тема = МассивСообщений[Индекс].Тема;
КонецЦикла;
Предупреждение("Сообщения отображены");

Сергей

Местный

Сообщений: 8
Баллов: 15
Регистрация: 26.06.2022

#10

0

28.06.2022 13:36:40

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = РаботаСоСпискамиДокументовКлиент.ПолучитьДанныеТекущейСтрокиСписка(
Элементы.Список, Элементы.Список.ТекущаяСтрока);

Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;

Если Поле = Элементы.Файлы Тогда
ОткрыватьЗакладкуФайлы=ПроверкаОткрытияЗаклФайлы(ЭтаФорма)
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуФайлы», ТекущиеДанные.Ссылка, ОткрыватьЗакладкуФайлы);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.ПодписанЭП Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуЭП», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.Задачи Тогда
ОткрытьФорму(«ОбщаяФорма.ПроцессыИЗадачи»,
Новый Структура(«Предмет», ТекущиеДанные.Ссылка),
ЭтаФорма);
Возврат;
КонецЕсли;

Если Поле = Элементы.ЕстьКатегории Тогда
ПараметрыОткрытия = Новый Структура(«Ключ, ОткрытьЗакладкуКатегории», ТекущиеДанные.Ссылка, Истина);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
Возврат;
КонецЕсли;

Если Поле = Элементы.СостояниеКонтроля Тогда
КонтрольКлиент.ОбработкаКомандыКонтроль(ТекущиеДанные.Ссылка, ЭтаФорма);
Возврат;
КонецЕсли;

ПараметрыОткрытия = Новый Структура(«Ключ», ТекущиеДанные.Ссылка);
ОткрытьФорму(«Справочник.ВнутренниеДокументы.ФормаОбъекта», ПараметрыОткрытия, Элементы.Список);
КонецПроцедуры

Данная ошибка возникает в тот момент, когда Вы пытаетесь вызвать серверный метод и передаете ему в качестве параметра управляемую форму.

Рассмотрим следующий модуль управляемой формы:

&НаСервере
Функция ТестВызоваСервера(Форма)
Форма.ТолькоПросмотр = Истина;
КонецФункции // ТестВызоваСервера()
&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
//попытка передачи переменной локального контекста на сервер
ТестВызоваСервера(ЭтаФорма);
КонецПроцедуры

Дело в том, что в контексте модуля управляемой формы переменная ЭтаФорма доступна всегда (как на клиенте, так и на сервере) и дополнительно ее передавать не требуется (если только вы не вызываете процедуру или функцию, перед которой указана директива &НаСервереБезКонтекста). Правильным будет следующий код:

&НаСервере
Функция ТестВызоваСервера()
ЭтаФорма.ТолькоПросмотр = Истина;	
КонецФункции // ТестВызоваСервера()
&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
//вызов контекстной серверной функции
ТестВызоваСервера();
КонецПроцедуры

Аналогичное замечание относится к серверным вызовам. Вы не можете передать содержимое переменной ЭтаФорма на сервер. Вы можете только запросить необходимую информацию на сервере и изменить форму в контексте клиента, либо реализовать это через серверный метод самой формы. Например, такой код работать не будет:

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
//попытка передачи переменной локального контекста на сервер
ОбщийМодульСервер.Тест(ЭтаФорма);
КонецПроцедуры

Подумайте сами, чем можно заменить такой вызов

  1. При передаче результата запроса функции через Возврат в Клиент, выходит ошибка «Отсутствует отображение для типа ‘ВыборкаИзРезультатаЗапроса‘».

    При совершении таких же манипуляций с кодом, ошибок не возникало. На ошибки все проверил.
    Какой тут может быть подводный камень?

    На клиенте:

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

    НаСервере

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

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Почитайте про Выбрать() и про его область видимости — На клиенте, На сервере…

  3. А почему точно в таких же запросах из клиента в сервер все работает? Разница только в другой таблице.

  4. Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Потому что:
    РезультатЗапроса (QueryResult)
    Выбрать (Select)
    Доступность:
    Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

    ВыборкаИзРезультатаЗапроса (QueryResultSelection)
    Доступность:
    Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

  5. Одинаковая ошибка как из Тонкого клиента, так из Толстого.

  6. Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    А где вы параметры запросу задаете ? Вернее их значения ?

    — Объединение сообщений, 2 июн 2016

    А, увидел

    — Объединение сообщений, 2 июн 2016

    Отладчиком проходились по серверной функции ? Попадает туда ?

  7. По серверной ходил. Ответ по запросу есть. Но при передаче в клиент путем Возврат, выходит ошибка.
    Перед этим киврялся и пытался передать значения на другую форму. Начала выходить ошибка. Потом эту Другую форму удалил……но результат с ошибкой сохранился.
    Могло это как-то повлиять?

  8. Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Вроде как результат запроса на клиента нельзя передать, обрабатывайте на сервере все.

Классика: Ошибка отображения типов: Отсутствует отображение для типа ☑ 0

TrueBuild

26.02.22

00:00

Пытаюсь открыть одну форму из другой, передавая туда параметры. В параметрах только ссылки и простые типы, никакие таблицы значений не передаю:

https://disk.yandex.ru/i/bTk0282HaaGC2Q

https://disk.yandex.ru/i/Y2undFzJ11HVSQ

Получаю ошибку:

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

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

Не могу понять, что не так?

Причем процедура ПриСозданииНаСервере() открываемой формы отрабатывает без ошибок. Ошибка возникает, когда вызов возвращается в ОткрытьФорму().

Подскажите, что делаю не так, в чем ошибка?

1

vicof

26.02.22

00:12

А 1ска говорит, что передаешь

2

МихаилМ

26.02.22

00:15

(0) Почитайте раздел рекомендации правил форума.

3

TrueBuild

26.02.22

00:34

(1) Поэтому и не понимаю, где ошибка. Вижу, что говорит, но так же вижу и в отладке, что я передаю — см. 2 скриншот, там ТЗ нет, только ссылки и простые типы.

(2) Если вы про поиск, то, естественно, им пользовался, ответа на свой вопрос не нашел.

4

H A D G E H O G s

26.02.22

00:50

(0) Ты ТаблицуЗначений в каком то из параметров возвращаешь с сервера. Скинь конфигу

5

TrueBuild

26.02.22

01:14

(4) По завершению процедуры ПриСозданииНаСервере, когда вызов возвращается обратно на клиент, в параметрах так же нет никакой ТЗ, так же только ссылки и простые типы:

https://disk.yandex.ru/i/qezDhmDrPg1Mjg

6

H A D G E H O G s

26.02.22

02:33

(5) Скинь Cf на liveups@yandex.ru

7

pechkin

26.02.22

07:30

Тз это не реквизит формы?

8

Мимохожий Однако

26.02.22

07:59

Вместо ТЗ надо передавать массив.

9

SuperMario

26.02.22

09:11

>> Причем процедура ПриСозданииНаСервере() открываемой формы отрабатывает без ошибок. Ошибка возникает, когда вызов возвращается в ОткрытьФорму()

Значит скрины не актуальны. Вы нас в заблуждение ими вводите.

«Курите» код по всем событиям в открываемой форме , начина с ПриСозданииНаСервере()

10

SuperMario

26.02.22

09:12

Вы с сервера на клиент в уже откываемой форме что-то универсальное передаете.

11

TrueBuild

26.02.22

09:31

Всем спасибо, разобрался, проблема оказалась в другом. (5) Вот тут на скрине полностью не видно, но в открываемой форме я создаю ТЗ и пытаюсь передать ее в качестве параметра в динамический список, чего, оказывается делать нельзя.

Ввело в заблуждение то, что исключение вызывалось после вызова ОткрытьФорму(), а само создание формы (ПриСозданииНаСервере) отрабатывало без ошибок.

12

ДедМорроз

26.02.22

14:24

ТаблицуЗначений передать с сервера на клиента нельзя.

Как ни странно,но создать ТЗ можно в толстом клиенте и с ухищрениями в тонком,а передать нельзя,так как ограничение искуственное.

13

acht

26.02.22

16:07

(12) > и с ухищрениями в тонком

Веб клиент — достаточно тонкий?

14

ДедМорроз

26.02.22

19:56

Есть несколько видов клиентов:

Толстый клиент,

Тонкий клиент,

Web-клиент,

Мобильный клиент.

В последних двух никакого намека на таблицу значений,так как ее там никогда не было.

В управляемых формах может появиться следующая ошибка:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable'

С данной ошибкой я столкнулся, когда пытался в управляемой форме на стороне сервера выполнить следующую команду:

 ОбъектФормы = РеквизитФормыВЗначение("Объект");
 ТЗВывода = ОбъектФормы.Бонусы.Выгрузить().Скопировать();
 ЗначениеВРеквизитФормы(ОбъектФормы, "Объект");

Решением данной проблемы было обнулить переменную с таблицей данных:

ТЗВывода = Неопределено;

RUBYX

0 / 0 / 1

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

Сообщений: 45

1

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

10.05.2022, 09:53. Показов 2172. Ответов 5

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


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

Еще раз всем здравствуйте! Когда пытаюсь обменяться данными между мобильной и основной центральной базой, почему то выходит ошибка отображения типов: Отсутствует отображение для типа ‘ТаблицаЗначений'{Справочник.Пьесы.Форма.ФормаСписка.Форма}. Данные появляются в центральной базе после добавления данных в мобильной базе, но вот ошибка меня смущает

Сам код вот (Мобильная платформа)

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 &НаСервере
Процедура ПолучитьПьесы()
    Попытка
        HTTPСоединение=Новый HTTPСоединение("192.168.43.241",,,,,30);   
        HTTPЗапрос=Новый HTTPЗапрос("/CenterMaxServer/hs/HTTPEx");  
        HTTPЗапрос.Заголовки.Вставить("Content-Type","text/html; charset=utf-8;");
        ОтветСервера=HTTPСоединение.Получить(HTTPЗапрос);
        Если ОтветСервера.КодСостояния=200 Тогда
            ДанныеСервера=Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));  
            Для Каждого СтрокаСервер Из ДанныеСервера Цикл 
                Пьеса=Справочники.Пьесы.НайтиПоНаименованию(СтрокаСервер.Наименование);
                Если Пьеса.Пустая() Тогда     
                Пьеса=Справочники.Пьесы.СоздатьЭлемент(); 
                Пьеса.Наименование=СтрокаСервер.Наименование;  
            Иначе                                              
                Пьеса=Пьеса.ПолучитьОбъект();
                            КонецЕсли; 
                Пьеса.Записать(); 
                            КонецЦикла;
        Иначе
            Попытка
                Сообщить(Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8")));
            Исключение
                Сообщить(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));
                КонецПопытки;
            КонецЕсли;
    Исключение
            Сообщить("Возникла проблема с интернетом");
    КонецПопытки;
КонецПроцедуры
 
 &НаСервере
Функция Сериализовать(ТелоJSON)
    ЗаписьJSON=Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    СжатыйОбъект=Новый ХранилищеЗначения(ТелоJSON, Новый СжатиеДанных(9));
    СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, СжатыйОБъект);
    Возврат СтрЗаменить(ЗаписьJSON.Закрыть(),"#","_РЕШЕТКА_");
КОнецФункцИИ
 
 &НаСервере
Функция Десериализовать(СтрокаJSON)
    ЧтениеJSON=Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрЗаменить(СтрокаJSON,"_РЕШЕТКА_","#"));
СЖатыйОбъект=СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON, Тип("ХранилищеЗначения"));
ЧтениеJSON.Закрыть();
Возврат СжатыйОбъект.Получить();
КОнецФУНКциИ
 
&НаКлиенте
Процедура Обновить(Команда)
    ПолучитьПьесы();
КонецПроцедуры
 
 &НаСервере
Функция ПолучитьРезультатВБазе()
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Пьесы.Наименование КАК Наименование
        |ИЗ
        |   Справочник.Пьесы КАК Пьесы";
    СтрТела = Запрос.Выполнить().Выгрузить();  
    Попытка
        HTTPСоединение=Новый HTTPСоединение("192.168.43.241",,,,,30);   
        HTTPЗапрос=Новый HTTPЗапрос("/CenterMaxServer/hs/HTTPEx/plays");  
        HTTPЗапрос.Заголовки.Вставить("Content-Type","text/html; charset=utf-8;");  
        HTTPЗапрос.УстановитьТелоИзСтроки(Сериализовать(СтрТела));
        ОтветСервера=HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
        Если ОтветСервера.КодСостояния=200 Тогда
            Возврат Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));  
            Иначе
            Попытка
                Сообщить(Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку("UTF8")));
            Исключение
                Сообщить(ОтветСервера.ПолучитьТелоКакСтроку("UTF8"));
                КонецПопытки;
            КонецЕсли;
    Исключение
            Сообщить("Возникла проблема с интернетом");
        КонецПопытки;  
        КонецФункции 
            
&НаКлиенте
        Процедура ОтправитьДанные(Команда)
            ПолучитьРезультатВБазе();
        КонецПроцедуры

Если нужна дополнительная информация могу потом прикрепить или выгрузку обеих баз дать. Заранее спасибо



0



271 / 223 / 98

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

Сообщений: 1,373

10.05.2022, 15:52

2

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

Решение

ПолучитьРезультатВБазе() почему это функция? Значение возврата то на клиенте нигде не используется
Если ОтветСервера.КодСостояния=200 Тогда
Возврат Десериализовать(ОтветСервера.ПолучитьТелоКакСтроку(«UTF8»));
Вот тут возможно летит мутабельное значение .



1



0 / 0 / 1

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

Сообщений: 45

10.05.2022, 18:29

 [ТС]

3

Вроде когда я писал «процедура», то мне ошибку выдавало, что нельзя использовать в процедуре или что-то типо такого, да и мы это по инструкционке делаем)

Добавлено через 17 минут
Кстати спасибо, я просто удалил эту строку и все работает как надо!)



0



271 / 223 / 98

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

Сообщений: 1,373

10.05.2022, 18:51

4

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

то мне ошибку выдавало, что нельзя использовать в процедуре

Верно.Процедура не может возвращать значение.

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

Кстати спасибо, я просто удалил эту строку и все работает как надо!)

Ну возможно оно где-то и должно использоваться.Тут вариант что результат должен возвращаться в процедуру с директивой «НаСервере» и обрабатываться,и предаваться на клиент в виде «простого типа».



1



0 / 0 / 1

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

Сообщений: 45

10.05.2022, 19:04

 [ТС]

6

Всем спасибо еще раз!



0



Ошибки

Данная ошибка возникает в тот момент, когда Вы пытаетесь вызвать серверный метод и передаете ему в качестве параметра управляемую форму.

Рассмотрим следующий модуль управляемой формы:

&НаСервере
Функция ТестВызоваСервера(Форма)

	Форма.ТолькоПросмотр = Истина;

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ТестВызоваСервера(ЭтаФорма);
	
КонецПроцедуры

Дело в том, что в контексте модуля управляемой формы переменная ЭтаФорма доступна всегда (как на клиенте, так и на сервере) и дополнительно ее передавать не требуется (если только вы не вызываете процедуру или функцию, перед которой указана директива &НаСервереБезКонтекста). Правильным будет следующий код:

&НаСервере
Функция ТестВызоваСервера()

	ЭтаФорма.ТолькоПросмотр = Истина;	

КонецФункции // ТестВызоваСервера()

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//вызов контекстной серверной функции
	ТестВызоваСервера();
	
КонецПроцедуры

Аналогичное замечание относится к серверным вызовам. Вы не можете передать содержимое переменной ЭтаФорма на сервер. Вы можете только запросить необходимую информацию на сервере и изменить форму в контексте клиента, либо реализовать это через серверный метод самой формы. Например, такой код работать не будет:

&НаКлиенте
Процедура ПокупательПриИзменении(Элемент)
	
	//попытка передачи переменной локального контекста на сервер
	ОбщийМодульСервер.Тест(ЭтаФорма);
	
КонецПроцедуры

Подумайте сами, чем можно заменить такой вызов

Поделиться страницей в соц.сетях

Метки: Метки Управляемые формы

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Ошибка обучения обхода штатного иммобилайзера starline s96 v2
  • Ошибка операции криптографии неизвестная ошибка 0x8010006e
  • Ошибка отображения типов отсутствует отображение для типа декорацияформы
  • Ошибка обучения кнопок на руле андроид магнитола
  • Ошибка операции криптографии неизвестная ошибка 0x8010006c

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: