Имя: Пароль:
1C
1С v8
Обновил ЗУП 3.1. Возникли проблемы с модулем УправлениеКонтактнойИнформациейСлужебный
, ,
0 Косяк
 
01.02.18
12:09
Обновил ЗУП до 3.1.4.169. Платформа 8.3.11.2954.

Перестала работать обработка выгрузки зарплатных данных в банк.

Ошибки такого типа:

{ВнешняяОбработка.МодульОбменаСБанком_ЗУП31.Форма.Форма.Форма(1144)}: Метод объекта не обнаружен (ЭтоРоссийскийАдрес)
        Если УправлениеКонтактнойИнформациейСлужебный.ЭтоРоссийскийАдрес(АдресРФ) Тогда

Общий модуль УправлениеКонтактнойИнформациейСлужебный изменился до неузнаваемости.

Что делать?
1 cw014
 
01.02.18
12:11
Искать аналоги
2 Мыш
 
01.02.18
12:11
(0) Править внешнюю обработку "МодульОбменаСБанком_ЗУП31"
3 Косяк
 
01.02.18
12:14
(2) Может старый модуль УправлениеКонтактнойИнформациейСлужебный   ввести в состав обработки?
4 Мыш
 
01.02.18
12:22
(3) Неправильный подход. Правильный: прочитать описание программных интерфейсов подсистемы и соответственно поправить код обработки.
5 Alexandr_U1982
 
01.02.18
12:24
Ошибка возникла из-за того, что при разработке обработки вы использовали процедуру или функцию (ЭтоРоссийскийАдрес) входящую в область "СлужебныеПроцедурыиФункции" общего модуля.
Эти процедуры и функции 1С не рекомендует использовать в своих разработках, т.к. их состав может внезапно измениться в одном из обновлений.
Вам нужно, либо использовать процедуру/функцию входящую в программный интерфейс (Область ПрограммныйИнтерфейс в объектах конфигурации), либо написать свою процедуру/функцию.
6 Косяк
 
01.02.18
12:25
(4)Все что связано с обработкой адресов - придется переписывать, а это довольно много. Обработка уже отлажена.
7 Косяк
 
01.02.18
12:25
Обработку писал кто-то, не я
8 Косяк
 
01.02.18
13:53
Решил на копии базы попробовать такой вариант:

Добавил старый общий модуль УправлениеКонтактнойИнформациейСлужебный и назвал его УправлениеКонтактнойИнформациейСлужебный2.

Пробую обработку, но вылазит такая ошибка:

{ВнешняяОбработка.МодульОбменаСБанком_ЗУП31.Форма.Форма.Форма(1132)}: Метод объекта не обнаружен (КонтактнаяИнформацияИзXML)
            XDTOСтруктура = УправлениеКонтактнойИнформациейСлужебный2.КонтактнаяИнформацияИзXML(КонтактныеДанные.ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.Адрес, РезультатыЧтения);
9 Косяк
 
01.02.18
13:59
Переименовал метод КонтактнаяИнформацияИзXML2, т.к. он есть и в старом обем модуле и в новом.

{ВнешняяОбработка.МодульОбменаСБанком_ЗУП31.Форма.Форма.Форма(1132)}: Метод объекта не обнаружен (КонтактнаяИнформацияИзXML2)
            XDTOСтруктура = УправлениеКонтактнойИнформациейСлужебный2.КонтактнаяИнформацияИзXML2(КонтактныеДанные.ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.Адрес, РезультатыЧтения);

Все равно не помогло. Метод есть, почему обработка его не видит?
10 Косяк
 
01.02.18
14:38
Никак не могу понять, почему не находит метод. Кто знает, какие тут могут быть причины?
11 Alexandr_U1982
 
01.02.18
14:47
При объявлении методов "КонтактнаяИнформацияИзXML" и "КонтактнаяИнформацияИзXML2" стоит слово Экспорт?
12 Вафель
 
01.02.18
14:49
теперь функция называется ЭтоНациональныйАдрес
13 Косяк
 
01.02.18
14:55
нашел ошибку. Оказываетсяя не весь модуль скопипастил. Нужно пойти перекусить, а то все глаза уже проглядел)
14 Косяк
 
01.02.18
14:56
Спасибо за участие!
15 Вафель
 
01.02.18
14:57
брось ты это дело: модули копипастить.
16 ildary
 
01.02.18
15:07
(15) Совет "переписать обработку правильно - под новый стандарт" - успешно проигнорирован. Как говорил один персонаж "я тоже не люблю делать вещи правильно, когда их можно сделать через з.адницу".
17 Косяк
 
01.02.18
15:34
(16)Да, надо переписывать чужую обработку. Бухгалтерии срочно нужно перечислять сотрудникам зарплату в банк и они думают, что внести нужные исправления - дело быстрое.

Времянка вряд ли прокатит. Сейчас посмотрел, - ф файл не выгрузилась колонка адреса и индекса. По-видимому это означает, что структура самих данных изменилась..
18 Косяк
 
01.02.18
15:36
(15)Оставить сбоку старый модуль, переименовав его, - кому это помешает?
19 Косяк
 
01.02.18
15:46
Теперь получилось так: Но адрес не выводится, там пусто.

Функция ПолучитьАдресОбъекта(парамОбъект, парамВидАдреса) Экспорт
    
    КонтактныеДанные = ПолучитьКонтактныеДанные(парамОбъект, Перечисления.ТипыКонтактнойИнформации.Адрес, парамВидАдреса);
    
    Если ЗначениеЗаполнено(КонтактныеДанные) Тогда
        
        СтруктураВозврата = Новый Структура;
        СтруктураВозврата.Вставить("Адрес",        "");
        СтруктураВозврата.Вставить("Индекс",    "");
        СтруктураВозврата.Вставить("Район",        "");
        СтруктураВозврата.Вставить("Город",        "");
        СтруктураВозврата.Вставить("Улица",        "");
        СтруктураВозврата.Вставить("Дом",        "");
        СтруктураВозврата.Вставить("Корпус",    "");
        СтруктураВозврата.Вставить("Квартира",    "");
        
        СтранаРоссия = Справочники.СтраныМира.Россия;
        
        // Пытаемся заполнить из параметров
        Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(КонтактныеДанные.ЗначенияПолей) Тогда
            РезультатыЧтения = Новый Структура;
            XDTOСтруктура = УправлениеКонтактнойИнформациейСлужебный2.КонтактнаяИнформацияИзXML(КонтактныеДанные.ЗначенияПолей, Перечисления.ТипыКонтактнойИнформации.Адрес, РезультатыЧтения);
            Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда
                XDTOСтруктура.Представление = КонтактныеДанные.Представление;
                XDTOСтруктура.Состав.Страна = Строка(СтранаРоссия);
            КонецЕсли;
        Иначе
            XDTOСтруктура = УправлениеКонтактнойИнформациейСлужебный2.АдресXMLВXDTO(КонтактныеДанные.ЗначенияПолей, КонтактныеДанные.Представление, );
        КонецЕсли;
        
        // Разбираем адрес
        АдресРФ = XDTOСтруктура.Состав.Состав;
        Страна = СокрЛП(XDTOСтруктура.Состав.Страна);
        Если УправлениеКонтактнойИнформациейСлужебный2.ЭтоРоссийскийАдрес(АдресРФ) Тогда
            
            Индекс = УправлениеКонтактнойИнформациейСлужебный2.ПочтовыйИндексАдреса(АдресРФ);
            
            Если Индекс = Неопределено Тогда
                Индекс = "";
            КонецЕсли;
            
            Район = РайонАдреса(АдресРФ);
            
            СубъектРФ = АдресРФ.СубъектРФ;
            Город = АдресРФ.Город;
            НаселенныйПункт = АдресРФ.НаселПункт;
            
            Город_НаселенныПункт = Город;
            Если ПустаяСтрока(Город) Тогда
                Город_НаселенныПункт = СокрЛП("" + СубъектРФ + " " + НаселенныйПункт);
            ИначеЕсли Не ПустаяСтрока(НаселенныйПункт) Тогда
                Город_НаселенныПункт = СокрЛП("" + Город + " " + НаселенныйПункт);
            КонецЕсли;
            
            Если ПустаяСтрока(Район) И ПустаяСтрока(Город) И ПустаяСтрока(НаселенныйПункт) Тогда
                Город = СубъектРФ;
                Город_НаселенныПункт = СубъектРФ;
            КонецЕсли;
            
            Улица = АдресРФ.Улица;
            
            Дом = "";
            Корпус = "";
            Квартира = "";
            
            // Строения и помещения
            Данные = УправлениеКонтактнойИнформациейСлужебный2.ЗданияИПомещенияАдреса(АдресРФ);
            Для Ном = 1 По Мин(Данные.Здания.Количество(), 1) Цикл
                Строка = Данные.Здания[Ном - 1];
                Дом = Строка.Значение;
            КонецЦикла;
            
            Для Ном = 2 По Данные.Здания.Количество() Цикл
                Строка = Данные.Здания[Ном - 1];
                Корпус = Строка.Значение;
            КонецЦикла;
            
            Для Ном = 1 По Мин(Данные.Помещения.Количество(), 1) Цикл
                Строка = Данные.Помещения[Ном - 1];
                Квартира = Строка.Значение;
            КонецЦикла;
            
            Адрес = Индекс + ", " + Район + ", " + Город + ", " + НаселенныйПункт + ", " + Улица + ", " + Дом + ", " + Корпус + ", " +Квартира;
            
            СтруктураВозврата.Индекс    = Индекс;
            СтруктураВозврата.Район        = Район;
            СтруктураВозврата.Город        = Город_НаселенныПункт;
            СтруктураВозврата.Улица        = Улица;
            СтруктураВозврата.Дом        = Дом;
            СтруктураВозврата.Корпус    = Корпус;
            СтруктураВозврата.Квартира    = Квартира;
            
        Иначе
            // Это иностранный адрес
            Адрес = СокрЛП(АдресРФ);
        КонецЕсли;
        
        СтруктураВозврата.Адрес = Адрес;
        
        Возврат СтруктураВозврата;
        
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
КонецФункции



Процедура ЗаполнитьСтрокуТаблицы(парамНоваяСтрока, Знач парамСтрока, парамОрганизация, парамПериод)
    
    СтруктураРабочегоМеста        = ПолучитьРабочееМестоФизическогоЛица(парамСтрока.ФизическоеЛицо, парамОрганизация, парамПериод);
    
    СтруктураПаспорта            = ПолучитьПаспортныеДанныеФизическогоЛица(парамСтрока.ФизическоеЛицо, парамПериод);
    СтруктураВторогоДокумента    = ПолучитьДанныеНеосновныхДокументовФизическогоЛица(парамСтрока.ФизическоеЛицо);
    
    СтруктураАдресаРегистрации    = ПолучитьАдресОбъекта(парамСтрока.ФизическоеЛицо, Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица);
    СтруктураАдресаПроживания    = ПолучитьАдресОбъекта(парамСтрока.ФизическоеЛицо, Справочники.ВидыКонтактнойИнформации.АдресМестаПроживанияФизическиеЛица);
    Если Не ЗначениеЗаполнено(СтруктураАдресаПроживания) Тогда
        СтруктураАдресаПроживания = СтруктураАдресаРегистрации;
    КонецЕсли;
    
    парамНоваяСтрока.FIOOWNER = парамСтрока.ФИО;
    парамНоваяСтрока.PASPORT  = СтруктураПаспорта.ДокументСерия + " " + СтруктураПаспорта.ДокументНомер + " " + СтруктураПаспорта.ДокументКемВыдан;
    парамНоваяСтрока.ADDRESS  = ?(ЗначениеЗаполнено(СтруктураАдресаРегистрации), Строка(СтруктураАдресаРегистрации.Район), "")
                       + ?(ЗначениеЗаполнено(СтруктураАдресаРегистрации), Строка(СтруктураАдресаРегистрации.Город), "")
                       + ?(ЗначениеЗаполнено(СтруктураАдресаРегистрации), Строка(СтруктураАдресаРегистрации.Улица), "")
                       + ?(ЗначениеЗаполнено(СтруктураАдресаРегистрации), Строка(СтруктураАдресаРегистрации.Дом), "")
                       + ?(ЗначениеЗаполнено(СтруктураАдресаРегистрации), Строка(СтруктураАдресаРегистрации.Корпус), "")
                       + ?(ЗначениеЗаполнено(СтруктураАдресаРегистрации), Строка(СтруктураАдресаРегистрации.Квартира), "");
    парамНоваяСтрока.INDEX    = ?(ЗначениеЗаполнено(СтруктураАдресаРегистрации), Строка(СтруктураАдресаРегистрации.Индекс), "");
    парамНоваяСтрока.PHONENM  = Прав(СокрЛП(СтруктураРабочегоМеста.ТабельныйНомер), 7) + " " + СтруктураРабочегоМеста.КодПодразделения;
    парамНоваяСтрока.VTYPE    = "V03";
    парамНоваяСтрока.ACCOUNT  = ПривестиНомерСчета(парамСтрока.НомерЛицевогоСчета);  
    парамНоваяСтрока.CASHVAL  = Формат(парамСтрока.Сумма, Объект.мФорматСуммыБезПробелов);