Имя: Пароль:
1C
1С v8
Ошибка обмена с сайтом (Розница)
0 romanыч
 
13.09.20
07:30
В 1С Розница не работает обмен с сайтом.
Ошибка:
Метод объекта не обнаружен (Свойство)

Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда

Функция ПредставлениеНаселенногоПункта(ОбъектАдреса) Экспорт
    
    АдресныеУровниБезСокращений = Новый Соответствие();
    АдресныеУровниБезСокращений.Вставить("MunDistrict", Истина);
    АдресныеУровниБезСокращений.Вставить("Settlement",  Истина);
    
    Если НЕ ОбъектАдреса.Свойство("AddressType") Тогда
        СписокПолейАдреса = "Area,City";
    ИначеЕсли РаботаСАдресамиКлиентСервер.ЭтоМуниципальныйАдрес(ОбъектАдреса.AddressType) Тогда
        СписокПолейАдреса = "Area,MunDistrict,Settlement,CityDistrict,Locality,Territory";
    Иначе
        СписокПолейАдреса = "Area,District,City,CityDistrict,Locality,Territory";
    КонецЕсли;
    СписокПолей = СтрРазделить(СписокПолейАдреса, ",");
    
    Адрес = Новый Массив;
    Для каждого ИмяПоля Из СписокПолей Цикл
        Если ОбъектАдреса.Свойство(ИмяПоля) И ЗначениеЗаполнено(ОбъектАдреса[ИмяПоля]) Тогда
            ПредставлениеУровня = ОбъектАдреса[ИмяПоля]
                + ?(АдресныеУровниБезСокращений.Получить(ИмяПоля) = Неопределено, " " + ОбъектАдреса[ИмяПоля + "Type"], "");
            Адрес.Добавить(СокрЛП(ПредставлениеУровня));
        КонецЕсли;
    КонецЦикла;
    
    Возврат СтрСоединить(Адрес, ", ");
    
КонецФункции

Тип переменной ОбъектАдреса это ОбъектXDTO

Раньше обмен работал. Давно не пользовался. С тоговремени производил обновление конфигурации и платформы. Подскажите,что можно поправить.
1 Ёпрст
 
гуру
13.09.20
08:46
(0) ну включи в отладчике остановку по ошибке и посмотри, че прилетает в ОбъектАдреса, мот там списокXDTO или Неопределен
2 romanыч
 
13.09.20
15:59
(1) Тип переменной ОбъектАдреса это ОбъектXDTO
Это я в отладчике посмотрел
3 Ёпрст
 
гуру
13.09.20
16:08
(2) в момент ошибки, или когда ?
4 RomanYS
 
13.09.20
16:09
(2) У ОбъектXDTO нет метода Свойство.

>> Раньше обмен работал. Давно не пользовался.
Значит либо обмен не работал, либо этот код не вызывался, либо туда приходил не ОбъектXDTO (наиболее вероятно)
5 Ёпрст
 
гуру
13.09.20
16:11
И..у ОбъектXDTO нет метода Свойство(), есть Свойства()
6 Ёпрст
 
гуру
13.09.20
16:14
и судя по-коду, туда должна прилетать Структура
7 romanыч
 
13.09.20
17:35
Победил при помощи добавления новой функции:

&НаСервере
Функция ПеременнаяСодержитСвойство(Переменная, ИмяСвойства) Экспорт
    // Инициализируем структуру для теста с ключом (значение переменной "ИмяСвойства") и значением NULL
    СтруктураПроверка = Новый Структура;
    СтруктураПроверка.Вставить(ИмяСвойства, NULL);
    // Заполняем созданную структуру из переданного значения переменной
    ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная);
    // Если значение для свойства структуры осталось NULL, то искомое свойство не найдено, и наоборот.
    Если СтруктураПроверка[ИмяСвойства]= NULL Тогда
        Возврат Ложь;
    Иначе
        Возврат Истина;
    КонецЕсли;
КонецФункции

Но дальше возникла новая проблема.Присутствует ссылка на функцию, которой нету ))
8 RomanYS
 
13.09.20
17:41
(7) Почему не разобраться с ошибкой и не исправить её? Ты рановато на путь велосипедостроения встал.
9 romanыч
 
13.09.20
18:21
(8) А чем это решение не "разобраться с ошибкой"? Как с ней можно разобраться, если разработчик использовал метод, которого нет у данного типа объекта? Я не совсем понимаю, как еще можно разобраться с ошибкой.
10 RomanYS
 
13.09.20
18:36
(9) разработчик вероятно писал под структуру. Ты сейчас сэмулируешь один метод, будет падать на другом, ты ещё один костыль добавишь.

Если разобраться в лоб не получается, но точно знаешь, что работало, может стоит поднять бэкапы посмотреть как работало.
11 romanыч
 
13.09.20
19:58
(10) нихрена там не под структуру писано. Все функции,где адрес формируется, имеют в названии XDTO да XML, да и в коде структурой не пахнет. Бэкапы старые нашел, там вообще код не такой, все совершенно изменилось. Разбираться долго придется, так что оставим так до следующего обновления. Благо все работает.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший