Имя: Пароль:
1C
1С v8
Несоответствие типов (параметр номер '1')
0 Марочка98
 
02.07.18
10:29
Здравствуйте, помогите пожалуйста с проблемой.
У меня внешняя обработка, загрузка xml файла в дерево значений, и выдает ошибку {Обработка.Обработка1.Форма.Форма.Форма(37)}: Ошибка при вызове метода контекста (УстановитьСтроку)
   Чтение.УстановитьСтроку(ТекстXML);
по причине:
Несоответствие типов (параметр номер '1')
Что нужно сделать?? Я начинающий программист в 1с, и поэтому не очень сильна  в этом.

Вот полностью мой код модуля.

&НаКлиенте
Процедура Файл(Команда)
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Заголовок = "Выбор документа";
   Диалог.Фильтр = "Документы XML (*.xml, *.xdr, *.xsd, *.xsl)|*.xml;*.xdr;*.xsd;*.xsl|Все файлы|*.*|";
   Если Диалог.Выбрать() Тогда
      ТекстXML.Прочитать(Диалог.ПолноеИмяФайла);
      Документ  = ТекстXML.ПолучитьТекст();
      Заголовок = "Просмотр XML-документа: " + Диалог.ПолноеИмяФайла;
      

   КонецЕсли;
                  
КонецПроцедуры



&НаКлиенте
Процедура КнИмпорт(Команда)
Если НЕ ПустаяСтрока(ТекстXML) Тогда
            Дерево = Импорт1();
            
            

      Если Объект.Дерево.Строки.Количество() > 0 Тогда
         ЭлементДерево = ТекстXML.Объект.Дерево;
         ЭлементДерево.СоздатьКолонки();
         ЭлементДерево.Колонки.Удалить(ЭлементДерево.Колонки["Атрибуты"]);
        
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры
&НаСервере
Функция Импорт1() Экспорт
   Чтение = Новый ЧтениеXML();
   Чтение.УстановитьСтроку(ТекстXML);
   ДеревоЗначений = Новый ДеревоЗначений();

   ДеревоЗначений.Колонки.Добавить("Элемент");
   ДеревоЗначений.Колонки.Добавить("Текст");
   ДеревоЗначений.Колонки.Добавить("Атрибуты");
   Корень = ДеревоЗначений.Строки.Добавить();
   Корень.Элемент = Чтение.Имя;
   Рекурсия(Корень, Чтение);
   Возврат ДеревоЗначений;
КонецФункции
Процедура Рекурсия(СтрокаДерева, Чтение)
   Если Чтение.КоличествоАтрибутов() > 0 Тогда
      АтрибутыСоответствие = Новый Соответствие();
      Пока Чтение.ПрочитатьАтрибут() Цикл
         АтрибутыСоответствие.Вставить(Чтение.Имя, Чтение.Значение);
      КонецЦикла;
      СтрокаДерева.Атрибуты = АтрибутыСоответствие;
   КонецЕсли;
   //Состояние(Чтение.Имя);
   Пока Чтение.Прочитать() Цикл
      Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
         Прервать;
      ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
         СтрокаДерева.Текст = Чтение.Значение;
      ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
         Дочерний = СтрокаДерева.Строки.Добавить();
         Дочерний.Элемент = Чтение.Имя;
         Рекурсия(Дочерний, Чтение);
      КонецЕсли;
         КонецЦикла;
КонецПроцедуры



&НаКлиенте
Процедура Дерево1ПриАктивизацииСтроки(Элемент)
   Объект.Атрибуты.Очистить();
   Данные = Элемент.ТекущиеДанные;
   Если Данные <> Неопределено Тогда
      АтрибутыДерева = Данные.Атрибуты;
      Если ТипЗнч(АтрибутыДерева) = Тип("Соответствие") Тогда
         Для каждого АтрибутДерева из АтрибутыДерева Цикл
            СтрокаТаблицы                  = Объект.Атрибуты.Добавить();
            СтрокаТаблицы.Атрибут          = АтрибутДерева.Ключ;
            СтрокаТаблицы.ЗначениеАтрибута = АтрибутДерева.Значение;
         КонецЦикла;
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Дерево1Выбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
   ОткрытьЗначение(ВыбраннаяСтрока.Текст);
КонецПроцедуры

&НаКлиенте
Процедура АтрибутыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
      ОткрытьЗначение(ВыбраннаяСтрока.ЗначениеАтрибута);

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


Процедура ОчиститьТаблицы() Экспорт
   Объект.Дерево.Строки.Очистить();
   Объект.Дерево.Колонки.Очистить();
   Объект.Атрибуты.Очистить();
КонецПроцедуры
1 quest
 
02.07.18
10:35
смотри на значение ТекстXML. Должна быть строка.
2 Марочка98
 
02.07.18
11:23
(1) я правильно понимаю что в табло надо смотреть?
4 catena
 
02.07.18
11:36
Вот в этом куске ТекстXML для этой функции - вообще не знакомая личность. Их надо познакомить. Например, через параметр функции.

Функция Импорт1() Экспорт
   Чтение = Новый ЧтениеXML();
   Чтение.УстановитьСтроку(ТекстXML);
5 Serg_1960
 
02.07.18
11:40
(2) Можно в табло, можно "Вычислить выражение"... или просто наведением курсора мыши на переменную - её значение будет показано.
"Отладка в 1С 8.3 на примерах"
https://www.youtube.com/watch?v=jbJ1B1r_b80
7 Марочка98
 
02.07.18
11:42
(4) а можно поподробнее?
8 Serg_1960
 
02.07.18
11:53
Поподробнее? :) Я выше ссылку давал - у автора есть видео о глобальных и локальных переменных; о параметрах функций и процедур...
9 Serg_1960
 
модератор
02.07.18
11:57
(офф) Марочка98 , заполните личную карточку (как минимум, поправьте графу "Пол") - с мужским полом как-то неудобно сочетаются "женские" окончания слов :)