06.12.11 — 17:51
Здравствуйте, есть функция на сервере , она возвраша5ет переменую на клиент с типом «ТаблицаЗначений»
но выскакиет ошибка Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’,
я как понял он не может передать данный тип переменной обраьно на клиент, как с этим бороться и как передать результат фунции на клиент обратно если у нее тип ТаблицаЗначений
1 — 06.12.11 — 17:53
заранее спсибо))
2 — 06.12.11 — 17:55
Нельзя передавать между сервером и клиентом мутабельные значения.
3 — 06.12.11 — 17:55
(0) А как передаешь?
4 — 06.12.11 — 17:56
Используйте временное хранилище. Поиск по форуму поможет.
5 — 06.12.11 — 17:57
(4) Т.е. если создать ТЗ на клиенте, а потом передать на сервер для заполнения — не получится?
6 — 06.12.11 — 17:58
(3) в плане как ??
7 — 06.12.11 — 17:58
Возврат Сп; // сп — таблица значений
8 — 06.12.11 — 17:59
(6) Да не, я ступил … зато веточку поднял 🙂
9 — 06.12.11 — 17:59
ТаблицаЗначений. Доступность: Сервер, толстый клиент, внешнее соединение.
Если клиент тонкий или веб, то использовать ТЗ нельзя.
Как вариант использовать массив структур
10 — 06.12.11 — 18:00
самое страное на другом компе работает, такая обработка и на той же конфе _)))))))))))))))))))))
11 — 06.12.11 — 18:00
и запускается в тонком клиенте))
12 — 06.12.11 — 18:01
(10) тогда почисти кеш )
13 — 06.12.11 — 18:01
(12) кеш то тут причем? мож я что не понимаю
14 — 06.12.11 — 18:02
аспирин на все лекарство ?? )))
15 — 06.12.11 — 18:03
а как у тебя работает то что не должно работать? ))
16 — 06.12.11 — 18:03
2(14) нет, это как раз от загадочных случаев когда одно и тоже на другом компе работает
17 — 06.12.11 — 18:04
(9) На клиенте использовать ТЗ можно.
18 — 06.12.11 — 18:05
19 — 06.12.11 — 18:05
(16)случай и в правду загадочный))
20 — 06.12.11 — 18:07
что мне тоже через табличную часть делать))?
21 — 06.12.11 — 18:07
(10) вполне возможно, ибо «Возможен обмен с сервером», но тогда
(11) таки клиент тонкий
(17) тогда СП меня обманывает:
«Доступность:
Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}. Имя типа XDTO: ValueTable»
22 — 06.12.11 — 18:07
сначало в нее , потом на клиент?
23 — 06.12.11 — 18:08
(21) тонкий, правда запуск стоит автоматически выбирать, но по интерфейсу фидно что в тонком вариенте запускается
24 — 06.12.11 — 18:09
(10) кс тати , а может платформы разные? )
25 — 06.12.11 — 18:10
(21) ТЗ может быть реквизитом формы. В этом случае работать с ней на клиенте можно.
Программно создать объект на клиенте нельзя.
26 — 06.12.11 — 18:10
(23) в смысле видно по нтерфейсу? на глаз определяешь чтоли? )
27 — 06.12.11 — 18:10
(22) а начнем сначала, а зачем ТЗ на клиенте?
(23) лично я не могу раличать интерфейсы тонкого и толстого клиента
28 — 06.12.11 — 18:11
(23) Толстый клиент в режиме управляемого приложения выглядит так же как и тонкий.
29 — 06.12.11 — 18:11
(25) Это верно, но на клиенте тип уже не таблица значений, а иной. Точно не помню.
30 — 06.12.11 — 18:12
(26) на глаз, там же сразу видны отличие, обычного от управляемого
31 — 06.12.11 — 18:12
или я не прав?
32 — 06.12.11 — 18:12
не прав)) все извиняюсь за безграмотность
33 — 06.12.11 — 18:13
(30) обычного от управляемого видно, а тонкий от толстого нет
34 — 06.12.11 — 18:13
(30) Ты определись про что ты про разных клиентов или разные режимы функционирования платформы.
35 — 06.12.11 — 18:14
(33) я с этим и с путал
36 — 06.12.11 — 18:14
платфформы у нас разные у них 13, у нас 14
37 — 06.12.11 — 18:15
но неужели из за платформы могут быть такие отличия и ошибки??
38 — 06.12.11 — 18:16
Но все таки. Зачем ТЗ на клиенте? Если конечно это не элемент интерфейса.
39 — 06.12.11 — 18:17
(38) на клиенте есть поле ТЗ, где выводиться результат
40 — 06.12.11 — 18:18
(39) так заполнять его на сервере
41 — 06.12.11 — 18:18
(40)щас в 13 платформе запущу, проверю
42 — 06.12.11 — 18:19
Ветка про общение слепого с глухим…
43 — 06.12.11 — 18:19
(41) дело не платформе
44 — 06.12.11 — 18:19
ну извините
45 — 06.12.11 — 18:20
придеться на сервере заполнять), про это я понял
46 — 06.12.11 — 18:20
(42) ну, он говорит что конфигурация одна и таже…
47 — 06.12.11 — 18:20
просто в прежней обработке возвращается на клиент все
48 — 06.12.11 — 18:21
конфа УНФ, но по моему это не имеет отношение, так как там и там она одна и одной версии
49 — 06.12.11 — 18:21
О, уже и обработки оказались разные…
50 — 06.12.11 — 18:22
&НаСервере
Функция ПолучитьМакет()
ЭтотОбъект = РеквизитФормыВЗначение("Объект");
Возврат ЭтотОбъект.ПолучитьМакет("Макет");
КонецФункции
&НаСервере
Функция ДайВидИТС(Вид)
Если Вид = Перечисления.ВидыИТС.ИТСПрофПлат Тогда
Возврат 10;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСТехно Тогда
Возврат 4;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСПрофБесплатный Тогда
Возврат 16;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСБюджет Тогда
Возврат 7;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСБюджетПроф Тогда
Возврат 8;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСБюджетПрофБесплатный Тогда
Возврат 9;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТССтроительство Тогда
Возврат 18;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТССтроительствоБесплатный Тогда
Возврат 17;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСМедицина Тогда
Возврат 65;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСПрофГоловной Тогда
Возврат 19;
ИначеЕсли Вид = Перечисления.ВидыИТС.ИТСДляУдаленного Тогда
Возврат 20;
КонецЕсли;
КонецФункции// ДайВидИТС()
&НаСервере
Функция ДайМыло()
Возврат Справочники.ВидыКонтактнойИнформации.EmailКонтрагента;
КонецФункции// ДайМыло()
&НаСервере
Функция ДайМыло2(Ссылка,Вид)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Представление
|ИЗ
| Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Ссылка = &Ссылка
| И КонтактнаяИнформация.Вид = &Вид";
Запрос.УстановитьПараметр("Вид", Вид);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Возврат Выборка.Представление;
КонецЦикла;
КонецФункции// ДайМыло2()
&НаСервере
Функция ДайПолнНаименование (Контрагент)
Возврат Контрагент.НаименованиеПолное;
КонецФункции// ДайПонНаименование (Контрагент)()
&НаСервере
Функция ДайИНН (Контрагент)
Возврат Контрагент.ИНН;
КонецФункции// ДайПонНаименование (Контрагент)()
&НаСервере
Функция ДайГород(Контрагент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Инфа.Город
|ИЗ
| Справочник.Контрагенты.КонтактнаяИнформация КАК Инфа
|ГДЕ
| Инфа.Ссылка = &Ссылка
| И Инфа.Вид.Наименование = ""Фактический адрес""";
Запрос.УстановитьПараметр("Ссылка", Контрагент);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Возврат Выборка.Город;
КонецЦикла;
КонецФункции// ДайГород()
&НаКлиенте
Процедура Заполнить()
попытка
Макет = ПолучитьМакет();
Эксель = Новый COMОбъект("Excel.Application");
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("XLS");
Макет.Записать(ИмяВременногоФайла);
Книга = Эксель.WorkBooks.Open(ИмяВременногоФайла);
//Эксель.Documents.Open(ИмяВременногоФайла);
Исключение
Сообщить("Возможно у вас не установлена программа Microsoft Office: Word ("+ОписаниеОшибки()+")");
Возврат ;
конецпопытки;
Лист = Книга.WorkSheets(1);
i = 11;
j = 1;
Для каждого Стр из Таблица Цикл
Контрагент = Стр.Контрагент;
// Договор = Стр.Договор;
//-- Заполнение строки Excel
Книга.Sheets(1).Cells(i,1).Value = j;
Книга.Sheets(1).Cells(i,2).Value = "13942-78";
Книга.Sheets(1).Cells(i,3).Value = 1;
Книга.Sheets(1).Cells(i,4).Value = "32855-40";
Книга.Sheets(1).Cells(i,5).Value = ДайВидИТС(Стр.ВидИТС);
Книга.Sheets(1).Cells(i,6).Value = Стр.РегНомер;
Книга.Sheets(1).Cells(i,7).Value = ДайПолнНаименование(Стр.Контрагент);
Книга.Sheets(1).Cells(i,8).Value = ДайИНН (Стр.Контрагент);
Книга.Sheets(1).Cells(i,9).Value = Стр.КолВоРабМест;
Книга.Sheets(1).Cells(i,10).Value = "";
Книга.Sheets(1).Cells(i,11).Value = "";
Книга.Sheets(1).Cells(i,12).Value = Стр.Контакт;
Книга.Sheets(1).Cells(i,13).Value = "";
Книга.Sheets(1).Cells(i,14).Value = ДайГород (Стр.Контрагент); // фактический
Книга.Sheets(1).Cells(i,15).Value = "";
Книга.Sheets(1).Cells(i,16).Value = "";
Книга.Sheets(1).Cells(i,17).Value = "";
Книга.Sheets(1).Cells(i,18).Value = "";
Книга.Sheets(1).Cells(i,19).Value = Стр.КодГорода;//ручками
Книга.Sheets(1).Cells(i,20).Value = Стр.Телефон;//ручками
Книга.Sheets(1).Cells(i,21).Value = "";
Книга.Sheets(1).Cells(i,22).Value = ДайМыло2(Стр.Контрагент, ДайМыло());
Книга.Sheets(1).Cells(i,23).Value = "";
Книга.Sheets(1).Cells(i,24).Value = "";
Книга.Sheets(1).Cells(i,25).Value = "";
Книга.Sheets(1).Cells(i,26).Value = Формат(Стр.ДатаНачала,"ДФ=MM.yy");
Книга.Sheets(1).Cells(i,27).Value = Стр.Выпусков;
Книга.Sheets(1).Cells(i,28).Value = Стр.Способ;
Книга.Sheets(1).Cells(i,29).Value = Стр.РегНомер1;
Книга.Sheets(1).Cells(i,30).Value = Стр.РегНомер2;
Книга.Sheets(1).Cells(i,31).Value = Стр.РегНомер3;
Книга.Sheets(1).Cells(i,32).Value = Стр.РегНомер4;
Книга.Sheets(1).Cells(i,32).Value = Стр.РегНомер5;
//+ рег номера
//-- -- -- -- -- -- -- -- --
j = j + 1;
i = i + 1;
КонецЦикла;
Попытка
Книга.SaveAs("C:1.xls");
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
КонецПопытки;
Эксель.Application.Quit();
НоваяКартинка = БиблиотекаКартинок.СостояниеОбменаДаннымиУспех;
Элементы.Заполнить.Картинка = НоваяКартинка;
Элементы.Заполнить.Заголовок = "Заполнено!";
КонецПроцедуры// Заполнить()
&НаСервере
Функция ДайРегНомера(Контрагент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номера.РегНомер
|ИЗ
| РегистрСведений.Номера КАК Номера
|ГДЕ
| Номера.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент",Контрагент);
Результат = Запрос.Выполнить();
// Выборка = Результат.Выбрать();
ТаблицаРезультатов = Результат.Выгрузить();
МассивТоваров = ТаблицаРезультатов.ВыгрузитьКолонку("РегНомер");
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(МассивТоваров);
Элементы.ТаблицаРегНомер.СписокВыбора.ЗагрузитьЗначения(МассивТоваров);
Элементы.ТаблицаРегНомер1.СписокВыбора.ЗагрузитьЗначения(МассивТоваров);
Элементы.ТаблицаРегНомер2.СписокВыбора.ЗагрузитьЗначения(МассивТоваров);
Элементы.ТаблицаРегНомер3.СписокВыбора.ЗагрузитьЗначения(МассивТоваров);
Элементы.ТаблицаРегНомер4.СписокВыбора.ЗагрузитьЗначения(МассивТоваров);
Элементы.ТаблицаРегНомер5.СписокВыбора.ЗагрузитьЗначения(МассивТоваров);
// Пока Выборка.Следующий() Цикл
// ДанныеВыбора.Добавить(Выборка.РегНомер);
// КонецЦикла;
Возврат ДанныеВыбора;
КонецФункции// ДайРегНомера()
&НаСервере
Функция ДайКонтакты(Контрагент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КонтактныеЛица.Представление
|ИЗ
| Справочник.КонтактныеЛица КАК КонтактныеЛица
|ГДЕ
| КонтактныеЛица.Владелец = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Результат = Запрос.Выполнить();
ТаблицаРезультатов = Результат.Выгрузить();
МассивТоваров = ТаблицаРезультатов.ВыгрузитьКолонку("Представление");
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(МассивТоваров);
Элементы.ТаблицаКонтакт.СписокВыбора.ЗагрузитьЗначения(МассивТоваров);
Возврат ДанныеВыбора;
КонецФункции// ДайКонтакты()
&НаКлиенте
Процедура ТаблицаКонтрагентПриИзменении(Элемент)
Строка = Элементы.Таблица.ТекущиеДанные;
Список = ДайРегНомера(Строка.Контрагент);
Контакты = ДайКонтакты(Строка.Контрагент);
КонецПроцедуры
&НаКлиенте
Процедура Запустить(Команда)
ЗапуститьПриложение("C:1.xls");
КонецПроцедуры
&НаКлиенте
Процедура Отправить(Команда)
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 587;
Профиль.Пользователь = "info@allzon.ru";
Профиль.Пароль = "38gjgeuftd";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.ПарольSMTP = "38gjgeuftd";
Профиль.ПользовательSMTP = "info@allzon.ru";
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Исключение
Сообщить("Ошибка при подключении к серверу" + ОписаниеОшибки());
Возврат;
КонецПопытки;
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель = "info@allzon.ru";
Сообщение.Получатели.Добавить("itsrobot@1c.ru");
Сообщение.Тема = "Выгрузка ИТС";
Сообщение.Тексты.Добавить("Сабж",ТипТекстаПочтовогоСообщения.HTML);
Сообщение.Вложения.Добавить("C:1.xls");
Почта.Послать(Сообщение);
Почта.Отключиться();
//Попытка
// УдалитьФайлы ("C:1.xls");
//Исключение
// Сообщить(ОписаниеОшибки());
//КонецПопытки;
КонецПроцедуры
&НаСервере
Функция НайдиКонтрагента (Контрагент, РегНомер)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.НаименованиеПолное ПОДОБНО &Контрагент
| И (НЕ Контрагенты.ПометкаУдаления)";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Возврат Выборка.Ссылка;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номера.Контрагент
|ИЗ
| РегистрСведений.Номера КАК Номера
|ГДЕ
| Номера.РегНомер = &РегНомер";
Запрос.УстановитьПараметр("РегНомер", РегНомер);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Возврат Выборка.Контрагент;
КонецЦикла;
СпрК = Справочники.Контрагенты.НайтиПоНаименованию(Контрагент);
Если НЕ СпрК.ПометкаУдаления Тогда
Возврат СпрК;
КонецЕсли;
КонецФункции// НайдиКонтрагента (Контрагент)()
&НаСервере
Функция ПустойКонтрагент()
Возврат Справочники.Контрагенты.ПустаяСсылка();
КонецФункции// ПустойКонтрагент()
&НаСервере
Функция ВидИТС (Строка)
Если строка = "ИТС Проф DVD Бесплатный" Тогда
Возврат Перечисления.ВидыИТС.ИТСПрофБесплатный;
ИначеЕсли строка = "ИТС Бюджет Проф" Тогда
Возврат Перечисления.ВидыИТС.ИТСБюджетПроф;
ИначеЕсли строка = "ИТС Бюджет Проф Бесплатный" Тогда
Возврат Перечисления.ВидыИТС.ИТСБюджетПрофБесплатный;
ИначеЕсли строка = "ИТС Технологическая поставка" Тогда
Возврат Перечисления.ВидыИТС.ИТСТехно;
ИначеЕсли строка = "ИТС для удаленного офиса" Тогда
Возврат Перечисления.ВидыИТС.ИТСДляУдаленного;
ИначеЕсли строка = "ИТС Франчайзинговый" Тогда
Возврат Перечисления.ВидыИТС.Отсутствует;
ИначеЕсли строка = "ИТС Проф DVD" Тогда
Возврат Перечисления.ВидыИТС.ИТСПрофПлат;
ИначеЕсли строка = "ИТС Строительство Бесплатный" Тогда
Возврат Перечисления.ВидыИТС.ИТССтроительствоБесплатный;
ИначеЕсли строка = "ИТС Медицина" Тогда
Возврат Перечисления.ВидыИТС.ИТСМедицина;
КонецЕсли;
КонецФункции// ВидИТС()
&НаКлиенте
Функция Дата_(стрДата)
стрДата_ = СокрЛП(СтрЗаменить(стрДата,".",""));
датДата = Сред(стрДата_,5)+Сред(стрДата_,3,2)+Лев(стрДата_,2);
Если СтрДлина(стрДата_)=6 Тогда
датДата = "20"+датДата;
КонецЕсли;
//Сообщить(датДата+"="+стрДата);
Попытка
Возврат Дата(датДата);
Исключение
Возврат Дата(0);
КонецПопытки;
КонецФункции // Дата_
&НаКлиенте
Процедура Загрузить(Команда)
перем ИмяФайла;
Попытка
Ex = Новый COMОбъект("Excel.Application");
Ex.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
Исключение
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла";
ДиалогВыбораФайла.Фильтр = "Лист Excel (*.xls)|*.xls|";
Если ДиалогВыбораФайла.Выбрать() Тогда
ИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла;
КонецЕсли;
Ex = Новый COMОбъект("Excel.Application");
Ex.WorkBooks.Open(ИмяФайла);
КонецПопытки;
Элементы.Состояние.Заголовок = "Открыт файл: " + ИмяФайла;
i=7;
j = 0;
ActiveCell = Ex.ActiveCell.SpecialCells(11);
RowCount = ActiveCell.Row;
Пока (НЕ ПустаяСтрока(ex.Sheets(1).Cells(i,1).Value)) Цикл
Строка = НайдиКонтрагента (строка(ex.Sheets(1).Cells(i,3).Value),строка(ex.Sheets(1).Cells(i,2).Value));
Если Строка <> ПустойКонтрагент () Тогда
Стр = Загрузка.Добавить();
Стр.Контрагент = Строка;
Стр.ВидИТС = ВидИТС (ex.Sheets(1).Cells(i,7).Value);
Стр.Дата = Дата_(ex.Sheets(1).Cells(i,5).Value);
j = j + 1;
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не найден контрагент: " + строка(ex.Sheets(1).Cells(i,3).Value) + " с номером " + строка(ex.Sheets(1).Cells(i,2).Value);
Сообщение.Сообщить();
КонецЕсли;
i = i + 1;
КонецЦикла;
Элементы.Состояние.Заголовок = Элементы.Состояние.Заголовок + " --- Загружено " + j + " позиций из " + (i-7) ;
Ex.Application.Quit();
КонецПроцедуры
&НаСервере
Процедура ИзменитьКонтрагента(Контрагент, ВидИТС, Дата)
СпрК = Контрагент.ПолучитьОбъект ();
СпрК.ВидИТС = ВидИТС;
СпрК.ДатаОкончанияПодпискиИТС = Дата;
СпрК.Записать ();
КонецПроцедуры// ИзменитьКонтрагента()
&НаКлиенте
Процедура ИзменитьПоСписку(Команда)
сч = 0;
Для каждого стр из Загрузка Цикл
ИзменитьКонтрагента(Стр.Контрагент, Стр.ВидИТС, Стр.Дата);
сч = сч + 1;
КонецЦикла;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Записано " + сч + " контрагентов!";
Сообщение.Сообщить();
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаПриАктивизацииСтроки(Элемент)
КонецПроцедуры
&НаСервере
Функция ОтобразитьТелефоны(Контрагент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Инфа.НомерТелефона
|ИЗ
| Справочник.Контрагенты.КонтактнаяИнформация КАК Инфа
|ГДЕ
| Инфа.Ссылка = &Ссылка
| И Инфа.Вид.Наименование = ""Телефон""";
Запрос.УстановитьПараметр("Ссылка", Контрагент);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Возврат Выборка.НомерТелефона;
КонецЦикла;
КонецФункции// ОтобразитьТелефоны()
&НаКлиенте
Процедура ДайТелефон(Команда)
Элементы.Телефоны.Заголовок = ОтобразитьТелефоны (Элементы.Таблица.ТекущиеДанные.Контрагент);
КонецПроцедуры
&НаСервере
Функция ПроверьДату(Дата)
Если Дата > ТекущаяДата () Тогда
Возврат ИСТИНА;
ИначеЕсли (Месяц(Дата) = Месяц(ТекущаяДата ())) И (Год(Дата) = Год(ТекущаяДата ())) Тогда
Возврат ИСТИНА;
КонецЕсли;
Возврат Ложь;
КонецФункции// ПроверьДату()
&НаСервере
Функция ЕстьРасходная(Контрагент, ВидИТС, ДатаИТС)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяЗапасы.Номенклатура,
| РасходнаяНакладнаяЗапасы.Ссылка.Дата
|ИЗ
| Документ.РасходнаяНакладная.Запасы КАК РасходнаяНакладнаяЗапасы
|ГДЕ
| РасходнаяНакладнаяЗапасы.Ссылка.Организация = &Организация
| И РасходнаяНакладнаяЗапасы.Ссылка.Контрагент = &Контрагент";
Организация = Справочники.Организации.НайтиПоНаименованию("Наша фирма.");
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Организация", Организация);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Номенклатура = ДайИТСПоВиду (ВидИТС) Тогда
Если Выборка.Дата <> "00010101" Тогда
Если ПроверьДату (Дата(Выборка.Дата)) Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции// ЕстьРасходная()
&НаСервере
Функция АктуальныеКонтрагенты ()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка,
| Контрагенты.ДатаОкончанияПодпискиИТС КАК Дата,
| Контрагенты.ВидИТС КАК ВидИТС
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| (НЕ Контрагенты.ЭтоГруппа)";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Сп = Новый ТаблицаЗначений;
Сп.Колонки.Добавить("Контрагент");
Сп.Колонки.Добавить("Дата");
Сп.Колонки.Добавить("ВидИТС");
Сп.Колонки.Добавить("Метка");
Сп.Колонки.Добавить("Город");
Пока Выборка.Следующий() Цикл
Если Выборка.Дата <> "00010101" Тогда
Если ПроверьДату (Дата(Выборка.Дата)) Тогда
Если НЕ ЕстьРасходная (Выборка.Ссылка, Выборка.ВидИТС, Выборка.Дата) Тогда
Строка = Сп.Добавить();
Строка.Контрагент = Выборка.Ссылка;
Строка.Дата = Выборка.Дата;
Строка.ВидИТС = Выборка.ВидИТС;
Строка.Город = ДайГород(Выборка.Ссылка);
Иначе
Строка = Сп.Добавить();
Строка.Контрагент = Выборка.Ссылка;
Строка.Дата = Выборка.Дата;
Строка.ВидИТС = Выборка.ВидИТС;
Строка.Город = ДайГород(Выборка.Ссылка);
Строка.Метка = 1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Сп;
КонецФункции// АктуальныеКонтрагенты()
&НаКлиенте
Процедура ЗаполнитьДокументы(Команда)
Список = АктуальныеКонтрагенты ();
Документы.Очистить();
Для каждого элем из Список Цикл
Стр = Документы.Добавить();
Стр.Контрагент = элем.Контрагент;
Стр.Дата = элем.Дата;
Стр.ВидИТС = элем.ВидИТС;
Стр.Город = элем.Город;
Если Элем.Метка = 1 Тогда
Стр.Метка = Истина;
//Элементы.Документы.ТекущийЭлемент.Шрифт = Новый Шрифт(,,Истина);
КонецЕсли;
КонецЦикла;
Документы.Индекс("Контрагент");
КонецПроцедуры
&НаСервере
Функция ДайИТСПоВиду(ВидИТС)
Если ВидИТС = Перечисления.ВидыИТС.ИТСПрофБесплатный Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000266");
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСБюджетПроф Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000268");
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСБюджетПрофБесплатный Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000268");
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСТехно Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000271");
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСДляУдаленного Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000272");
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.Отсутствует Тогда
Возврат Справочники.Номенклатура.ПустаяСсылка();
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСПрофПлат Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000266");
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТССтроительствоБесплатный Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000269");
ИначеЕсли ВидИТС = Перечисления.ВидыИТС.ИТСМедицина Тогда
Возврат Справочники.Номенклатура.НайтиПоКоду("00000000270");
КонецЕсли;
КонецФункции// ДайИТСПоВиду()
&НаСервере
Процедура ЗаполнитьДокументНаСервере(ДанныеФормы, Контрагент, ВидИТС)
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.РасходнаяНакладная"));
Док.Дата = ТекущаяДата ();
Док.Организация = Справочники.Организации.НайтиПоНаименованию ("Наша фирма.");
Док.Контрагент = Контрагент;
Док.ВидОперации = Перечисления.ВидыОперацийРасходнаяНакладная.ПродажаПокупателю;
Док.Договор = Контрагент.ДоговорПоУмолчанию;
Док.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду ("643");
Строка = Док.Запасы.Добавить();
Строка.Количество = 1;
Строка.Номенклатура =ДайИТСПоВиду (ВидИТС);
Строка.ЕдиницаИзмерения = Строка.Номенклатура.ЕдиницаИзмерения;
Строка.СтавкаНДС = Строка.Номенклатура.СтавкаНДС;
ЗначениеВДанныеФормы(Док,ДанныеФормы);
КонецПроцедуры// ЗаполнитьДокументНаСервере()
&НаКлиенте
Процедура РасходныеНакладные(Команда)
Для каждого Строка из Документы Цикл
Форма = ПолучитьФорму("Документ.РасходнаяНакладная.ФормаОбъекта");
ДанныеФормы = Форма.Объект;
ЗаполнитьДокументНаСервере(ДанныеФормы, Строка.Контрагент, Строка.ВидИТС);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Записать();
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ТаблицаРегНомерПриИзменении(Элемент)
Строка = Элементы.Таблица.ТекущиеДанные;
Список = ДайРегНомера(Строка.Контрагент);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьПомеченныхКонтрагентов(Команда)
//Документы.Очистить();
//
//Список = АктуальныеКонтрагенты ();
//Документы.Очистить();
//
//Для каждого элем из Список Цикл
// Если Элем.Метка <> 1 Тогда
// Стр = Документы.Добавить();
// Стр.Контрагент = элем.Контрагент;
// Стр.Дата = элем.Дата;
// Стр.ВидИТС = элем.ВидИТС;
// КонецЕсли;
//КонецЦикла;
СписокСтрок = Новый Массив();
Для Каждого Эл Из Документы Цикл
Если Эл.Метка Тогда
СписокСтрок.Добавить(Эл);
КонецЕсли;
КонецЦикла;
// КоличествоСтрок = СписокСтрок.Количество();
Для каждого Стр Из СписокСтрок Цикл
Документы.Удалить(Стр);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
//Элементы.Документы.Контрагент.НомерСоглашения.Доступность=Истина;
КонецПроцедуры
51 — 06.12.11 — 18:22
обработка одна и таже
52 — 06.12.11 — 18:24
&НаСервере Функция АктуальныеКонтрагенты ()
…
Возврат Сп; КонецФункции //
53 — 06.12.11 — 18:25
(47)это если передалать придеться, чтоб на сервере запонялась
54 — 06.12.11 — 18:25
Жесть. Почитайте Радченко. Откройте для себя директиву &НаСервереБезКонтекста. Разберитесь как работают УФ.
55 — 06.12.11 — 18:25
(54) ок. пойду в библиотеку
56 — 06.12.11 — 18:26
спасибо за внимание всем, и за советы)
57 — 06.12.11 — 18:28
58 — 08.12.11 — 15:27
&НаКлиенте
Процедура Сформировать(Команда)
Доки.Очистить();
НайтиДоговора();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура НайтиДоговора()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыКонтрагентовТаблица.Ссылка.Владелец.Ссылка как Ссылка,
| ДоговорыКонтрагентовТаблица.Дата,
| ДоговорыКонтрагентовТаблица.Сумма,
| ДоговорыКонтрагентовТаблица.Ссылка.Наименование как ВидДоговора
|ИЗ
| Справочник.ДоговорыКонтрагентов.Таблица КАК ДоговорыКонтрагентовТаблица
| ГДЕ
|ДоговорыКонтрагентовТаблица.Дата > &ДатаСег
|И ДоговорыКонтрагентовТаблица.Дата < &ДатаДок ";
Запрос.УстановитьПараметр("ДатаСег",ТекущаяДата());
Запрос.УстановитьПараметр("ДатаДок",НачалоДня(ТекущаяДата())+864000);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Сп = Новый ТаблицаЗначений;
Сп.Колонки.Добавить("Дата");
Сп.Колонки.Добавить("Контрагент");
Сп.Колонки.Добавить("ВидДоговора");
Сп.Колонки.Добавить("Сумма");
Пока Выборка.Следующий() Цикл
строка = сп.Добавить();
Строка.Контрагент = Выборка.ссылка;
строка.Дата = Выборка.Дата;
строка.ВидДоговора =Выборка.ВидДоговора;
строка.сумма = выборка.сумма;
КонецЦикла;
//
Для каждого строчка из сп Цикл
Стр = Доки.Добавить();
Стр.Контрагент = строчка.Контрагент;
Стр.Дата = строчка.Дата;
Стр.ВидДоговора = строчка.ВидДоговора;
Стр.сумма = строчка.сумма;
КонецЦикла;
/// Доки - таблица значений на форме, но пишет ошику что якобы ее нельзя заполнять на сервере
КонецПроцедуры
59 — 08.12.11 — 15:27
вот код который сделал, как заполнить таблицу на форме
60 — 08.12.11 — 15:32
(40) как заполнить , выдает ошибку {Обработка.НайтиДоговораНаОплату.Форма.Форма.Форма(4)}: Ошибка при установке значения атрибута контекста (Доки) НайтиДоговора(Доки); Нельзя изменять поле, содержащее объект данных формы

61 — 08.12.11 — 15:36
(57)это прочитал)
62 — 08.12.11 — 15:36
кто нибудь может подсказать, так сказать на путь истиный наставить))??
63 — 08.12.11 — 15:37
чтоб все в тонком клиенте работало
64 — 08.12.11 — 15:51
ап ап ап )
65 — 08.12.11 — 15:51
мож кто хоть идейку?
66 — 08.12.11 — 15:51
&НаСервереБезКонтекста — может ли с такой директивой, или надо с &НаСервере
67 — 08.12.11 — 15:58
никто не знает7
68 — 08.12.11 — 16:43
а, GROOVY, тут нет?)
69 — 09.12.11 — 07:40
Автор идъётЪ :) ...жги еще :)
70 — 09.12.11 — 07:41
+ ДНК — не излечим 🙂
71 — 09.12.11 — 14:32
Какой шикарный баг: если между тэгами [ 1C ] [ /1C ] есть код (1), то это тоже считается за ссылку на сообщение темы.
Только не говорите, что это фича =)))
72 — 09.12.11 — 15:40
(69)не человек ты
73 — 09.12.11 — 15:41
(71) )))
74 — 09.12.11 — 17:36
(71) а почему только (1)? там на самом деле и (0), и (2), и (3), и т.д. 🙂
(74) сообщение (1) самое популярное и мы сейчас добавляем этому сообщению популярности своими постами =))
Добрый день. Сегодня наступил на интересные грабли:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’
Подобная ошибка возникает при попытке передать с клиента на сервер таблицу значений, и это мне давно известно, однако я получил эту ошибку без явной передачи таблицы. Вот часть кода с которым произошла ошибка:
&НаКлиенте
Процедура Заполнить(Команда)
тМассив = Новый Массив;
тМассив .Добавить(Объект.Организация);
ПоискНаСервере(тМассив);
КонецЕсли;
КонецПроцедуры
Процедура ПоискСсылокНаСервере(тМассив, тОсновнаяТаблица = Неопределено)
тДанныеВФорму = Ложь;
Если тОсновнаяТаблица = Неопределено Тогда
тОсновнаяТаблица = Новый ТаблицаЗначений;
тОсновнаяТаблица.Колонки.Добавить(«Ссылка»);
тДанныеВФорму = Истина;
КонецЕсли;
<<<<>>>>>>
Если <<<<>>>>>> Тогда
ПоискСсылокНаСервере(МассивСсылок,тОсновнаяТаблица);
КонецЕсли;
Если тДанныеВФорму Тогда
ЗначениеВРеквизитФормы(тОсновнаяТаблица,»ТаблицаСсылок»);
КонецЕсли;
КонецПроцедуры
В этом коде процедура с клиента вызывает выполнение кода на сервере, с одним единственным параметром, — массив ссылок. Хотя в процедуре есть два входящих параметра это массив и таблица значение — которая является не обязательным параметром и используется при рекурсивном вызове. И не смотря на то что при вызове с клиента на сервер мы не используем второй параметр, приложение пытается отправить данное значение на клиент и мы получаем вышеописанную ошибку. Выход из данной ситуации один перед возвратом на клиент убить таблицу написав код:
тОсновнаяТаблица = Неопределено
На сегодня все.
На чтение 2 мин. Просмотров 182 Опубликовано 15.12.2019
Содержание
- понедельник, 25 августа 2014 г.
- Отсутствует отображение для типа ‘ValueTable’
- Обработка для исправления ошибки в документе «Регистрация оплаты списком»
понедельник, 25 августа 2014 г.
Отсутствует отображение для типа ‘ValueTable’
Добрый день. Сегодня наступил на интересные грабли:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param Форма: Элемент Тип: anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘ValueTable’
Подобная ошибка возникает при попытке передать с клиента на сервер таблицу значений, и это мне давно известно, однако я получил эту ошибку без явной передачи таблицы. Вот часть кода с которым произошла ошибка:
В управляемых формах может появиться следующая ошибка:
С данной ошибкой я столкнулся, когда пытался в управляемой форме на стороне сервера выполнить следующую команду:
Решением данной проблемы было обнулить переменную с таблицей данных:
Обработка для исправления ошибки в документе «Регистрация оплаты списком»
В релизе 3.1.68.59 обнаружена ошибка в документе «Регистрация оплаты списком», при создании банковских и кассовых документов из документа «Регистрация оплаты списком» выходит ошибка «Ошибка отображения типов: Отсутствует отображение для типов http://v8.1c.ru/8.1/data/core>ValueTable».
Обработку могут использовать пользователи с версией программы ПРОФ и КОРП. Для версий программы Старт и Базовая, исправления будут доступны только в следующем релизе.
Данную ошибку можно исправить с помощью обработки: скачать
1) В режиме 1С: Предприятия под ролью «Администратора» с полными правами, необходимо з апустить обработку.
2) Нажать кнопку «Установить исправление».
3) Дождаться сообщения «Расширение успешно установлено.Текущая версия расширения = 1.0 Необходимо перезапустить приложение.»
4) Перезапустить базу в режиме 1С: Предприятия (уже под пользователем, который принимает оплаты) и работать дальше (ошибка больше не будет возникать).
|
Ответы (5)
Обсуждение закрыто |
|
|||||||||||||
Описание ошибки
При попытке просмотреть результат выполнения кода в отдельном окне, кликнув для этого по гиперссылке результата, появляется окно с ошибкой отображения типов.
Сценарий воспроизведения
Открыть консоль кода, ввести в поле редактора следующий код:
Результат = "0";
Нажать кнопку «Выполнить». Убедиться, что в группе формы отобразился корректный результат выполнения кода.
Кликнуть ЛКМ по гиперссылке «0» напротив результата. Появится окно с ошибкой следующего содержания:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’
{InfostartToolkit Обработка.ИТК_КонсольРазработчика.Форма.Основная.Форма(441)}: РезультатВыполнения = ПолучитьИзВременногоХранилища(ТекущийРезультат.Адрес);по причине:
Ошибка получения значения из временного хранилища
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.2/mngsrv/ws}response Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/core}Structure
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: Value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’
Ожидаемое поведение, если бы ошибки не было
Должно открыться диалоговое окно с полученным результатом выполнения кода.
Скриншоты

Окружение:
Infostart Toolkit 2.0.0
Платформа: 8.3.17.1989 (Linux x86-64)
Режим БД: клиент-серверный
Конфигурация:
1С:Комплексная автоматизация 2 (2.5.6.220)
Основной режим запуска: Управляемое приложение
Режим совместимости: Версия8_3_16
Версия БСП: 3.1.3.535
Клиент:
ОС: Windows x86-64 (Microsoft Windows 10 version 10.0 (Build 17763))
Язык: ru
Режим запуска: Управляемое приложение
-
Суть проблемы в следующем. Есть форма документа «ВыдачаКнигНаРуки». Необходимо в этом документе автоматически заполнять поле «ВидКниги», его можно вытащить из реквизита «Произведение» с типом данных «СправочникСсылка.Произведения». Никак не могу разобраться с типами данных при передачи их с клиента на сервер и обратно. Хотела все это реализовать через запрос в модуле объекта, но запуталась с типами данных.
Вот процедура с модуле объекта:
Процедура ПолучитьВидКниги (СтрокаТабличнойЧасти) Экспорт Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | ВыдачаКнигНаРукиКниги.Произведение.ВидКниги |ИЗ | Документ.ВыдачаКнигНаРуки.Книги КАК ВыдачаКнигНаРукиКниги |ГДЕ | ВыдачаКнигНаРукиКниги.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); СтрокаТабличнойЧасти = Запрос.Выполнить().Выгрузить(); КонецПроцедурыВот в модуле формы:
&НаСервере Процедура ПолучитьВидКнигиНаСервере(СтрокаТабличнойЧасти) ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); ОбъектНаСервере.ПолучитьВидКниги(СтрокаТабличнойЧасти); ЗначениеВРеквизитФормы(ОбъектНаСервере, "Объект"); КонецПроцедуры &НаКлиенте Процедура КнигиПроизведениеПриИзменении(Элемент) СтрокаТабличнойЧасти = Элементы.Книги.ТекущиеДанные; Стр = Новый Структура(); Стр.Вставить(СтрокаТабличнойЧасти); ПолучитьВидКнигиНаСервере(Стр); КонецПроцедурыИ все это выдает следующую ошибку:
{Документ.ВыдачаКнигНаРуки.Форма.ФормаДокумента.Форма(20)}: Ошибка при вызове метода контекста (ПолучитьВидКнигиНаСервере)
ПолучитьВидКнигиНаСервере(Стр);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’Как это можно исправить? Или может есть способ, как вытащить ВидКниги попроще?
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
ТЗ нельзя гонять просто так между клиентом и сервером
-
Это я уже поняла. Я не понимаю, что можно гонять. Как ошибку исправить?
-
Offline
alexburn
Модераторы
Команда форума
Модератор- Регистрация:
- 5 янв 2009
- Сообщения:
- 15.150
- Симпатии:
- 560
- Баллы:
- 204
На форуме неоднократно поднимался этот вопрос. Воспользуйтесь поиском.
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.890
- Симпатии:
- 1.030
- Баллы:
- 204
Модуль объекта вам не нужен вообще.
Форма доступна на клиенте и сервере.
Значение в строке ТЧ можно получить через конструкцию вида СсылкаНаОбъект[ИмяРеквизитаЗначениеКоторогоНужноПолучить] выполненого на стороне сервера без контекста.
Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’
Описание ошибки:
Ошибка при программировании, конфигурировании кода в 1С 8:
Ошибка отображения типов:
Отсутствует отображение для типа ‘ЭлементСпискаЗначений’
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘v’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘value’:
форма: Элемент
имя: {http://v8.1c.ru/8.1/data/core}value
Найденные решения:

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

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

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

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

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

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

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

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


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