Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 03:56

Обращение к процедуре объекта как к функции

Автор natanka123, 21 сен 2022, 16:13

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

natanka123

LexaK, Сделала как Вы написали:


&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьДанные(лкЧтениеXML, ИмяЭлемента)    Экспорт

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



Процедура ЗаписатьДанныеНаСервере() Экспорт

лкЧтениеXML.ОткрытьФайл("D:\НоваяПапка\document.xml");
    Пока лкЧтениеXML.Прочитать() Цикл
        лкДанные = ПолучитьДанные(лкЧтениеXML,"ЭлементСправочника");
        Если лкДанные <> Неопределено Тогда
            //получили данные
            Сообщить("УНП " + лкДанные.УНП + ", Наименование " + лкДанные.Наименование);
            Если лкДанные.УНП <> Неопределено Тогда
                //есть УНП
               
                НайденныйКонтрагент = Справочники.Контрагенты.Найти(Число(лкДанные.УНП), "УНП");
                //ЧтениеXML.ЗначениеАтрибута("УНП");
                //Справочники.Контрагенты.НайтиПоРеквизиту("УНП", Число(ЧтениеXML.УНП));
                Если НайденныйКонтрагент <> Неопределено Тогда
                    Продолжить;
                КонецЕсли;
               
                НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
                НовыйКонтрагент.Наименование = лкДанные.Наименование;
                НовыйКонтрагент.УНП = лкДанные.УНП;
                НовыйКонтрагент.ПолноеНаименование = лкДанные.ПолноеНаименование;
                НовыйКонтрагент.Записать();
           
            КонецЕсли;
        КонецЕсли;
КонецЦикла;               


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



Выдает ошибку:


{ОбщийМодуль.РегЗад_загрузка.Модуль(39,2)}: Переменная не определена (лкЧтениеXML)
<<?>>лкЧтениеXML.ОткрытьФайл("D:\НоваяПапка\document.xml"); (Проверка: Сервер)
{ОбщийМодуль.РегЗад_загрузка.Модуль(40,10)}: Переменная не определена (лкЧтениеXML)
    Пока <<?>>лкЧтениеXML.Прочитать() Цикл (Проверка: Сервер)
{ОбщийМодуль.РегЗад_загрузка.Модуль(41,35)}: Переменная не определена (лкЧтениеXML)
        лкДанные = ПолучитьДанные(<<?>>лкЧтениеXML,"ЭлементСправочника"); (Проверка: Сервер)
{ОбщийМодуль.РегЗад_загрузка.Модуль(41,20)}: Процедура или функция с указанным именем не определена (ПолучитьДанные)
        лкДанные = <<?>>ПолучитьДанные(лкЧтениеXML,"ЭлементСправочника"); (Проверка: Сервер)



Клиент=Ложь
Сервер=истина
Внешное соединение=Ложь
Вызов сервера=Ложь
 




LexaK

natanka123, переименуйте
лкЧтениеXML -в- ЧтениеXML

вообще у antoneus, лучше решение, с использованием фабрикиХДТО
но как вариант, попробуйте
если помогло нажмите: Спасибо!

natanka123

LexaK, лкЧтениеXML ==> ЧтениеXML сделала.
{ОбщийМодуль.РегЗад_загрузка.Модуль(39,2)}: Переменная не определена (ЧтениеXML)
<<?>>ЧтениеXML.ОткрытьФайл("D:\НоваяПапка\document.xml"); (Проверка: Сервер)
{ОбщийМодуль.РегЗад_загрузка.Модуль(40,10)}: Переменная не определена (ЧтениеXML)
    Пока <<?>>ЧтениеXML.Прочитать() Цикл (Проверка: Сервер)
{ОбщийМодуль.РегЗад_загрузка.Модуль(41,35)}: Переменная не определена (ЧтениеXML)
        лкДанные = ПолучитьДанные(<<?>>ЧтениеXML,"ЭлементСправочника"); (Проверка: Сервер)
{ОбщийМодуль.РегЗад_загрузка.Модуль(41,20)}: Процедура или функция с указанным именем не определена (ПолучитьДанные)
        лкДанные = <<?>>ПолучитьДанные(ЧтениеXML,"ЭлементСправочника"); (Проверка: Сервер)



natanka123

у функции эту часть убрала:

&НаКлиентеНаСервереБезКонтекста

Ошибок нет, запустила, посмотрим что выйдет.

natanka123

LexaK, у согласна, но у него код выдает такую ошибку:

Преобразование значения к типу Число не может быть выполнено
{ОбщийМодуль.РегЗад_загрузка.Модуль(11)}:НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("УНП", Число(Элемент.УНП));

LexaK

natanka123, так вам же antoneus написал, такой код добавить в самом начале цикла
Для каждого Элемент Из Результат.ЭлементСправочника Цикл
    //вот эту проверку вставьте
    Если ТипЗнч(Элемент.УНП) <> Тип("Строка") Тогда
        Продолжить
    КонецЕсли;
если помогло нажмите: Спасибо!

natanka123

Цитата: LexaK от 22 сен 2022, 14:12natanka123, так вам же antoneus написал, такой код добавить в самом начале цикла
Для каждого Элемент Из Результат.ЭлементСправочника Цикл
    //вот эту проверку вставьте
    Если ТипЗнч(Элемент.УНП) <> Тип("Строка") Тогда
        Продолжить
    КонецЕсли;
Вы были правы.
Я не обратила на это внимание, заработала.
Большое спасибо ВАМ.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск