Преобразование массива структур в Таблицу значений |
Я |
08.10.18 — 12:28
Ребят,появилась проблема,задача состоит в том чтобы Таблицу значений перевести с Клиента на сервере,делаю это через массив структур(Нашел в интернете функции,приложу их в теме) вроде бы делаю все правильно,но все равно выдает ошибку *Ошибка отображения типов:
Отсутствует отображение для типа ‘КомандаФормы’*
Так вот «Выберите:» реквизит формы
Код внешней обработки :
&НаКлиенте
Функция ПреобразоватьТаблицуЗначенийВМассив(тзДанные,мсДанные)
мсДанные = Новый Массив;
// Запишем в массив
Для Каждого СтрокаТЗ Из тзДанные Цикл
стСтрокаТаблицы = Новый Структура;
Для Каждого ИмяКолонки Из тзДанные.Колонки Цикл
стСтрокаТаблицы.Вставить(ИмяКолонки.Имя, СтрокаТЗ[ИмяКолонки.Имя]);
КонецЦикла;
мсДанные.Добавить(стСтрокаТаблицы);
КонецЦикла;
Возврат мсДанные;
КонецФункции
&НаСервере
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные)
тзДанные = Новый ТаблицаЗначений;
Для Каждого ЭлементМассива Из мсДанные Цикл
// Рисуем колонки для таблицы
//Если тзДанные.Колонки.Количество() = 0 Тогда
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
тзДанные.Колонки.Добавить(«Отдел»,,»Отдел»);
тзДанные.Колонки.Добавить(«Сотрудник»,,»Фамилия сотрудника»);
тзДанные.Колонки.Добавить(«Оклад»,,»Оклад»);
КонецЦикла;
//КонецЕсли;
// Добавляем данные в таблицу
НоваяСтрока = тзДанные.Добавить();
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
//НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
НоваяСтрока.Отдел=»Отдел 1″;
НоваяСтрока.Сотрудник=»Иванов»;
НоваяСтрока.Оклад=5600;
КонецЦикла;
КонецЦикла;
Возврат тзДанные;
КонецФункции
&НаСервере
Процедура СКлиентаНаСервере(Команда,Массив,Список,МсДанные)
Если Выберите = «Массив» Тогда
Массив.Добавить(«ПередачаМассива»);
Для Каждого Строки из Массив Цикл
Сообщить(Строки);
КонецЦикла;
ИначеЕсли Выберите = «СписокЗначений» Тогда
Список.Добавить(«ПередачаСписка»);
Для Каждого ЭлементСписка из Список Цикл
Сообщить(ЭлементСписка);
КонецЦикла;
ИначеЕсли Выберите=»ТаблицаЗначений» Тогда
Для Каждого Колонки из МсДанные Цикл
Сообщить(Колонки);
КонецЦикла;
КонецЕсли;
1 — 08.10.18 — 12:31
Есть готовое решение. Почему его не используешь?
2 — 08.10.18 — 12:32
(1) в бсп?
3 — 08.10.18 — 12:33
(0) сделай просто реквизит формы ТаблицаЗначений. Это и есть массив структур
чтобы его перевести в ТЗ делаешь ТвойРеквизит.Выгрузить(); получаешь таблицу значений.
4 — 08.10.18 — 12:35
(2) Да.
5 — 08.10.18 — 12:37
(4) а какая версия? я в пятницу облазил в поисках не нашел. знаю есть из тз в массив, а обратно не видел(
6 — 08.10.18 — 12:38
(4) Гонишь
7 — 08.10.18 — 12:42
Можно же через значениеВСтроку или сейчас такое не используется?
8 — 08.10.18 — 12:44
(7) Используется. *овнокодерами.
9 — 08.10.18 — 12:45
(6) Не могу пока проверить — база занята.
Возможно гоню.
Можно здесь взять готовые:
http://catalog.mista.ru/public/240022/
10 — 08.10.18 — 12:54
(3) Получается что Создаю реквизит формы называю его ТабЗнч и &НаКлиенте
Функция ПредачаТаблицыЗначений()
ТабЗнч.Колонки.Добавить(«Отдел»,,»Отдел»);
ТабЗнч.Колонки.Добавить(«Сотрудник»,,»Фамилия сотрудника»);
ТабЗнч.Колонки.Добавить(«Оклад»,,»Оклад»);
ТабЗнч.Отдел=»Отдел 1″;
ТабЗнч.Сотрудник=»Иванов»;
ТабЗнч.Оклад=5600;
КонецФункции
&НаСервере
Процедура СКлиентаНаСервере(Команда,Массив,Список)
Если Выберите = «Массив» Тогда
Массив.Добавить(«ПередачаМассива»);
Для Каждого Строки из Массив Цикл
Сообщить(Строки);
КонецЦикла;
ИначеЕсли Выберите = «СписокЗначений» Тогда
Список.Добавить(«ПередачаСписка»);
Для Каждого ЭлементСписка из Список Цикл
Сообщить(ЭлементСписка);
КонецЦикла;
ИначеЕсли Выберите=»ТаблицаЗначений» Тогда
ТабЗнч.Выгрузить();
КонецЕсли;
Всеравно летит ошибка
11 — 08.10.18 — 12:54
(3) Если не понятно,скажи,заредактю:)
12 — 08.10.18 — 13:14
кажется КомандаФормы не хочет в ТЗ
iznvi
13 — 08.10.18 — 13:17
(12) ?
Автор lolozhiga, 18 фев 2014, 10:45
0 Пользователей и 1 гость просматривают эту тему.
Помогите с формой. Есть код:
&НаКлиенте
Процедура ПечатьК(ТабДокумент,Команда)
Печать(ТабДокумент);
КонецПроцедуры
&НаСервере
Процедура Печать(ТабДокумент)
ПечатьАкта(ТабДокумент) ;
ТабДокумент.Показать();
КонецПроцедуры
&НаСервере
Функция ПечатьАкта(ТабДокумент)
Перем ПодразделениеОтветственныхЛиц;
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ПолеСверху = 10;
ТабДокумент.ПолеСлева = 5;
ТабДокумент.ПолеСнизу = 10;
ТабДокумент.ПолеСправа = 5;
ТабДокумент.АвтоМасштаб = Ложь;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
Табдокумент.ОтображатьСетку = Ложь;
ТабДокумент.ОтображатьЗаголовки = Ложь;
//Запрос.УстановитьПараметр("ПустойКонтрагент", Справочники.Контрагенты.ПустаяСсылка());
Запрос = ЗапросНаСервере();
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ТОРГ2");
//СведенияОПокупателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.Покупатель, Шапка.ДатаДокумента);
//СведенияОПоставщике = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Шапка.ЮрФизЛицо, Шапка.ДатаДокумента);
//Руководители = ОтветственныеЛицаБП.ОтветственныеЛица(Шапка.Руководители, Шапка.ДатаДокумента, ПодразделениеОтветственныхЛиц);
//Руководитель = Руководители.РуководительПредставление;
//Бухгалтер = Руководители.ГлавныйБухгалтерПредставление;
ОбластьМакета = Макет.ПолучитьОбласть("ШапкаПервойСтраницы");
ОбластьМакета.Параметры.Заполнить(Шапка);
//ОбластьМакета.Параметры.ПредставлениеОрганизации = ОписаниеОрганизации(СведенияОПокупателе, "ПолноеНаименование,ЮридическийАдрес,ИНН,КПП,Телефоны");
//ОбластьМакета.Параметры.ОрганизацияПоОКПО = ОписаниеОрганизации(СведенияОПокупателе, "КодПоОКПО");
ОбластьМакета.Параметры.ДатаДокумента = Формат(Шапка.ДатаДокумента, "ДФ=dd.MM.yyyy");
//ОбластьМакета.Параметры.ДолжностьРуководителя = Руководители.РуководительДолжность;
//ОбластьМакета.Параметры.РуководительФИО = Руководители.РуководительПредставление;
//ОбластьМакета.Параметры.Грузоотправитель = ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,ЮридическийАдрес,ИНН,КПП,Телефоны");
ОбластьМакета.Параметры.НомерДокумента = Шапка.НомерДок;
ОбластьМакета.Параметры.НомерОснования = Объект.НомерОснования;
ОбластьМакета.Параметры.ОснованиеДляСоставленияАкта = Объект.Основание;
ОбластьМакета.Параметры.ПредставлениеПодразделения = Шапка.ПодразделениеОрганизации;
ОбластьМакета.Параметры.ДатаОснования = Формат(Объект.ДатаОснования, "ДФ=dd.MM.yyyy");
//ОбластьМакета.Параметры.МестоПриемкиТовара = ОписаниеОрганизации(СведенияОПокупателе, "ЮридическийАдрес");
ОбластьМакета.Параметры.ПереченьСопроводительныхДокументов = "Накладная № " + Шапка.Номер + " от " + Формат(Шапка.Дата, "ДФ=dd.MM.yyyy");
ОбластьМакета.Параметры.ДатаДоставкиТоваровДень = Шапка.День;
ОбластьМакета.Параметры.ДатаДоставкиТоваровМесяц = Шапка.Месяц;
ОбластьМакета.Параметры.ДатаДоставкиТоваровГод = Шапка.Год;
ТабДокумент.Вывести(ОбластьМакета);
//ТабДокумент.Показать();
Возврат ТабДокумент;
КонецФункции
&НаСервере
Функция ЗапросНаСервере ()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СсылкаНаОбъект", Объект.СсылкаНаОбъект);
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.НомерВходящегоДокумента КАК Номер,
| ПоступлениеТоваровУслуг.ДатаВходящегоДокумента КАК ДатаДокумента,
| ПоступлениеТоваровУслуг.Контрагент КАК Организация,
| ПоступлениеТоваровУслуг.Контрагент КАК ЮрФизЛицо,
| ПоступлениеТоваровУслуг.Контрагент КАК Поставщик,
| ПоступлениеТоваровУслуг.Контрагент КАК Контрагент,
| ПоступлениеТоваровУслуг.Организация КАК Руководители,
| """" КАК АдресДоставки,
| ПоступлениеТоваровУслуг.Организация КАК Грузополучатель,
| ПоступлениеТоваровУслуг.Контрагент КАК Грузоотправитель,
| ПоступлениеТоваровУслуг.Контрагент.ОсновнойБанковскийСчет КАК БанковскийСчет,
| ПоступлениеТоваровУслуг.Организация КАК Покупатель,
| ПоступлениеТоваровУслуг.Организация КАК Плательщик,
| ПоступлениеТоваровУслуг.ДоговорКонтрагента.Представление КАК Основание,
| ПоступлениеТоваровУслуг.ДоговорКонтрагента.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
| ПоступлениеТоваровУслуг.ВалютаДокумента,
| ПоступлениеТоваровУслуг.КурсВзаиморасчетов КАК Курс,
| ПоступлениеТоваровУслуг.КратностьВзаиморасчетов КАК Кратность,
| ПоступлениеТоваровУслуг.СуммаВключаетНДС,
| ПоступлениеТоваровУслуг.КратностьВзаиморасчетов,
| ПоступлениеТоваровУслуг.КурсВзаиморасчетов,
| ПоступлениеТоваровУслуг.Номер КАК НомерДок,
| ПоступлениеТоваровУслуг.Дата,
| ПоступлениеТоваровУслуг.ПодразделениеОрганизации,
| ДЕНЬ(ПоступлениеТоваровУслуг.Дата) КАК День,
| МЕСЯЦ(ПоступлениеТоваровУслуг.Дата) КАК Месяц,
| ГОД(ПоступлениеТоваровУслуг.Дата) КАК Год
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Ссылка = &СсылкаНаОбъект";
Возврат Запрос ;
КонецФункции
Выдает ошибку:
{Форма.Форма.Форма(168)}: Ошибка при вызове метода контекста (Печать)
Печать(ТабДокумент);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства ‘param’:
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘КомандаФормы’
Как это исправить? Может у кого — нибудь есть простой пример вывода ВПФ с формой? Платформа : 8.3.4.408, Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.29.8), Форма Торг-2.
Подозреваю что ТабДокумент — это у вас реквизит на форме.
Вам нужно на клиенте получать табличный документ, а уже потом на основании него заполнять поле на форме.
Цитата: MuI_I_Ika от 18 фев 2014, 11:54
Подозреваю что ТабДокумент — это у вас реквизит на форме.
На форме у меня только 3 вводимых параметра. Туда я нехочу ничего передовать.
Добавлено: 18 фев 2014, 17:08
Цитата: MuI_I_Ika от 18 фев 2014, 11:55
Вам нужно на клиенте получать табличный документ, а уже потом на основании него заполнять поле на форме.
Нет в ланах что-то заполнять на форме! Хочу получить из запроса данные и из формы, вводимые вручную и ими уже заполнять печатную форму.
Тогда что такое ТабДокумент для формы?
Цитата: MuI_I_Ika от 18 фев 2014, 17:12
Тогда что такое ТабДокумент для формы?
Переделала. Убрала ТабДокумент. Теперь выглядит так:
&НаКлиенте
Процедура ПечатьК(Команда,МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
&НаСервере
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(«ТОРГ2»);
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, «ТОРГ2») Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ТОРГ2», «ТОРГ2»,
ПечатьАкта()) ;
КонецЕсли
КонецПроцедуры
Ошибка:
{Форма.Форма.Форма(168)}: Ошибка при вызове метода контекста (Печать)
Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: param Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа ‘{http://v8.1c.ru/8.1/data/core}ValueTable’;
По порядку какие типы у реквизитов?
МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода
Цитата: MuI_I_Ika от 18 фев 2014, 18:17
По порядку какие типы у реквизитов?МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода
Убрала эти реквизиты. Получилось так:
&НаКлиенте
Процедура ПечатьК(Команда,СсылкаНаДок, ТабДок, ЗаголовокТабДок)
Печать(СсылкаНаДок, ТабДок, ЗаголовокТабДок);
КонецПроцедуры
&НаСервере
Процедура Печать(СсылкаНаДок, ТабДок, ЗаголовокТабДок) Экспорт
Массив=Новый Массив;
Массив.Добавить(СсылкаНаДок);
КоллекцияПечатныхФорм=Новый ТаблицаЗначений;
КоллекцияПечатныхФорм.Колонки.Добавить(«ИмяВРЕГ»);
КоллекцияПечатныхФорм.Колонки.Добавить(«ИмяМакета»);
КоллекцияПечатныхФорм.Колонки.Добавить(«Картинка»);
КоллекцияПечатныхФорм.Колонки.Добавить(«ПолныйПутьКМакету»);
КоллекцияПечатныхФорм.Колонки.Добавить(«СинонимМакета»);
КоллекцияПечатныхФорм.Колонки.Добавить(«ТабличныйДокумент»);
КоллекцияПечатныхФорм.Колонки.Добавить(«Экземпляров»);
ПечФорма=КоллекцияПечатныхФорм.Добавить();
ПечФорма.ИмяВРЕГ=»ТОРГ2″;
ПечФорма.Экземпляров=1;
ПараметрыОтправки=Новый Структура;
ПараметрыОтправки.Вставить(«Получатель»);
ПараметрыОтправки.Вставить(«Текст»,»»);
ПараметрыОтправки.Вставить(«Тема»,»»);
ПараметрыВывода=Новый Структура;
ПараметрыВывода.Вставить(«ДоступнаПечатьПоКомплектно»,Ложь);
ПараметрыВывода.Вставить(«ПараметрыОтправки»,ПараметрыОтправки);
ОбъектыПечати=Новый СписокЗначений;
ОбъектДляСервера = РеквизитФормыВЗначение(«Объект»);
ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект);
ОбъектДляСервера.Печать(
Массив,
КоллекцияПечатныхФорм,
ОбъектыПечати,
ПараметрыВывода
);
// Проверим, все ли макеты были сформированы
Для Каждого Стр Из КоллекцияПечатныхФорм Цикл
Если Стр.ТабличныйДокумент = Неопределено Тогда
ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр(«ru = ‘В обработчике печати не был сформирован табличный документ для: %1′»),
Стр.ИмяМакета
);
ВызватьИсключение(ТекстСообщенияОбОшибке);
КонецЕсли;
Стр.ТабличныйДокумент.КоличествоЭкземпляров = Стр.Экземпляров;
КонецЦикла;
ТабДок=КоллекцияПечатныхФорм[0].ТабличныйДокумент;
ЗаголовокТабДок=КоллекцияПечатныхФорм[0].СинонимМакета;
КонецПроцедуры
Ошибка:
{Форма.Форма.Форма(208)}: Метод объекта не обнаружен (Печать)
ОбъектДляСервера.Печать(
процедура Печать() должна быть экспортной, и если вы привели весь код из ВПФ, то этого недостаточно, для конфигураций построенных на БСП, нужен специальный алгоритм технология создания ВПФдля регистрации ВПФ и обработок, почитайте
Цитата: Besart от 18 фев 2014, 19:35
процедура Печать() должна быть экспортной, и если вы привели весь код из ВПФ, то этого недостаточно, для конфигураций построенных на БСП, нужен специальный алгоритм технология создания ВПФдля регистрации ВПФ и обработок, почитайте
Должна быть, если она в модуле, а если она в форме? Ссылка не открывается. У кого-нибудь есть простой пример?
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Внешняя печатная форма с формой в 8.3
Похожие темы (5)
Поиск
Alwarus 0 / 0 / 0 Регистрация: 13.07.2016 Сообщений: 6 |
||||
1 |
||||
1C 8.x Открытие формы документа с заполнением данных из формы справочника13.07.2016, 22:39. Показов 9469. Ответов 7 Метки нет (Все метки)
Здравствуйте! И есть Документ, созданный на основании реестра сведений создал команду, которая открывает документ из формы справочника
Нужно, чтобы в форму документа передавалось значение Наименование (ФИО) из справочника, форма открывается, а оно не передается. Помогите плз.
__________________
0 |
Dethmontt Модератор 3700 / 2899 / 570 Регистрация: 10.03.2011 Сообщений: 11,414 Записей в блоге: 1 |
||||
13.07.2016, 22:54 |
2 |
|||
Alwarus, почему не передается? Добавлено через 1 минуту
Добавлено через 2 минуты
ПараметрыФормы = Новый Структура(«Наименование», ПараметрКоманды);
ОткрытьФорму(«Документ.ПерсональныеДанные.Форма.Фо рмаДокумента», ПараметрыФормы, Но такой параметр ты должен обработать вручную в процедуре ПриСозданииНаСервере Добавлено через 2 минуты
ПараметрыФормы.Вставить(«ЗначенияЗаполнения», Новый Структура(«Пациент», ПараметрКоманды)); При таком подходе, у реквизита должна стоять галка «Заполнять из данных заполнения»
0 |
0 / 0 / 0 Регистрация: 13.07.2016 Сообщений: 6 |
|
14.07.2016, 07:41 [ТС] |
3 |
По второму варианту выдает ошибку: {Справочник.Пациент.Форма.ФормаЭлемента1.Форма(83) }: Ошибка при вызове метода контекста (ОткрытьФорму) Наверно и при этом надо создать процедуру ПриСозданииНаСервере. Или ПриОткрытии?
0 |
Модератор 3700 / 2899 / 570 Регистрация: 10.03.2011 Сообщений: 11,414 Записей в блоге: 1 |
|
14.07.2016, 11:29 |
4 |
Alwarus, что стоит в Тип параметр команды — в свойствах команды? Добавлено через 3 минуты
0 |
Alwarus 0 / 0 / 0 Регистрация: 13.07.2016 Сообщений: 6 |
||||
14.07.2016, 13:47 [ТС] |
5 |
|||
Тип команды СправочникСсылка.Пациент Команды формы наверно можно использовать, создал кнопку на форме с командой в модуле объекта:
Выдает такую же ошибку.
0 |
Dethmontt Модератор 3700 / 2899 / 570 Регистрация: 10.03.2011 Сообщений: 11,414 Записей в блоге: 1 |
||||
14.07.2016, 14:48 |
6 |
|||
Сообщение было отмечено Alwarus как решение РешениеAlwarus,
Элементы.Наименование; Что это такое? Добавлено через 48 секунд
Добавлено через 3 минуты
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине: Ошибка о чем говорит? Что ты передаешь на сервере Хрень, сервер не знает таких типов как «ПолеФормы»
1 |
0 / 0 / 0 Регистрация: 13.07.2016 Сообщений: 6 |
|
14.07.2016, 21:03 [ТС] |
7 |
1 Заработало, спасибо! И за совет про Элемент тоже…)) Интересно получается, мы создаем структуру с ключом «ЗначенияЗаполнения» и значением, которое получаем созданием еще одной структуры с ключом по справочнику «Пациент» и значением-ссылкой на него, правильно?
0 |
Модератор 3700 / 2899 / 570 Регистрация: 10.03.2011 Сообщений: 11,414 Записей в блоге: 1 |
|
14.07.2016, 21:09 |
8 |
правильно? Совершенно верно Добавлено через 1 минуту
Там же не было ссылки на элементы формы. Параметр может быть чем угодно, его нужно настраивать (может зависеть от группы и т.д.)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
14.07.2016, 21:09 |
Помогаю со студенческими работами здесь Открытие формы на добавление записи с автоматическим заполнением связанного поля Вызов значения из справочника в коде формы документа Открытие формы на добавления на основе данных из другой формы Очистка данных формы, открытие другой формы Автоматическое открытие формы справочника при переходе в Подсистему. Открытие формыдокумента во фрейме Столкнулся с проблемой, пока не знаю как её разрулить (все в web) 1. Есть… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |
Ошибка отображения типов: Отсутствует отображение для типа ‘ЭлементСпискаЗначений’
Описание ошибки:
Ошибка при программировании, конфигурировании кода в 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)