AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.07.2017, 10:47   #1  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Работа с Веб-сервисом налоговой по проверке контрагента
Добрый день,
Появилась задача проверять контрагентов в нашей доблестной налоговой службе.
У них есть веб-сервис по адресу http://npchk.nalog.ru/
Там есть даже некоторое описание и ссылки на WSDL.
B вроде все не плохо, и даже Аксапта без ругани цепляет этот WSDL.
Но дальше возникла трудность с которой я не могу справится, может я туплю жестко, помогите пожалуйста!
X++:
public static str GetVendStatus(VendTable   _vend)
{
    NalogCheck.FNSNDSCAWS2_PortClient proxy;
    NalogCheck.NdsRequest2NP[]      ndsReqArray;
    NalogCheck.NdsRequest2NP        ndsReq;
    NalogCheck.NdsResponse2         ndsResp;
    NalogCheck.NdsResponse2NP[]     ndsRespArray;
    NalogCheck.NdsResponse2NP       ndsNP;
    str     ret;
 ;
 new InteropPermission(InteropKind::ClrInterop).assert();

 proxy = new NalogCheck.FNSNDSCAWS2_PortClient();

    ndsReq = New NalogCheck.NdsRequest2NP();
    ndsReq.set_INN(_vend.INN_RU);
    ndsReq.set_KPP(_vend.KPP_RU);
    ndsReq.set_DT(date2str(SystemDateGet(), 123, DateDay::Digits2, DateSeparator::Dot, DateMonth::Digits2, DateSeparator::Dot, DateYear::Digits4));

    ndsReqArray = New NalogCheck.NdsRequest2NP[1](); // Ошибка "Отсутствуют ссылки на сборку, содержащую тип NalogCheck.NdsRequest2NP. Ошибка вызова статического метода ClrObject."
    ndsReqArray.SetValue(ndsReq,0);

    ndsResp = New NalogCheck.NdsResponse2();
    ndsResp = proxy.NdsRequest2(ndsReqArray);

    ndsRespArray = New NalogCheck.NdsResponse2NP[1]();
    ndsRespArray = ndsResp.get_NP();
    ndsNP = New NalogCheck.NdsResponse2NP();
    ndsNP = ndsRespArray.GetValue(0);
    ret = ndsNP.get_State();

 CodeAccessPermission::revertAssert();
    return ret;
}
Все отлично компилируется, но при вызове возникает ошибка "Отсутствуют ссылки на сборку, содержащую тип NalogCheck.NdsRequest2NP. Ошибка вызова статического метода ClrObject."

Соответственно как правильно инициализировать массив из вот таких неправильных типов?
Если же написать просто
X++:
 ndsReqArray[0] = ndsReq;
не компилируется с ошибкой "Переменная не является массивом."

Спасибо!
Старый 21.07.2017, 10:54   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Craz Посмотреть сообщение
Соответственно как правильно инициализировать массив из вот таких неправильных типов?
Если же написать просто
X++:
 ndsReqArray[0] = ndsReq;
не компилируется с ошибкой "Переменная не является массивом."

Спасибо!
Это на X++ насколько я понимаю? В общем случае разные хитрые штуки можно сделать используя Reflection
параметры типов (type parameters) в Ax
Хотя в вашем случае это всего-лишь массив. Он вроде как и так должен работать


А вообще проще всю логику в сборку на Net засунуть, которая в X++ уже более простой интерфейс предоставлять будет

Последний раз редактировалось S.Kuskov; 21.07.2017 в 11:00.
Старый 21.07.2017, 12:12   #3  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Проверка контрагента через налоговую с помощью C#
http://arxont.blogspot.ru/2015/10/c.html
Для тренировки сначала напишите на C# утилиту командной строки. И не обязательно всё средствами Аксапты реализовывать.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 21.07.2017, 12:19   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Попробуйте использовать метод доступа с типом Array.
X++:
[
    DataMemberAttribute,
    AifCollectionTypeAttribute('_array', Types::Class, classStr(FieldClass)),
    AifCollectionTypeAttribute('return', Types::Class, classStr(FieldClass))
]
public Array array(Array _array = array)
{
    array = _array;
    return array;
}
__________________
// no comments
Старый 21.07.2017, 12:38   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
На всякий случай, могу порекомендовать бесплатную замену Visual Studio, чтобы писать программы на C#
http://www.monodevelop.com/documenta...-2.4-released/
Я с ней столкнулся когда делал игры в среде Unity3D, она там используется чтобы писать игры на C#. Там полноценная среда разработки и отладчик. Она создает обычные C#-ские проекты, которые можно потом открыть в MS Visual Studio.
Делал с помощью нее утилиту командной строки, которая скачивает документы с цифровыми подписями из Сферы-Курьер. Там аналогичные массивы используются.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/
Старый 21.07.2017, 12:59   #6  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
На всякий случай, могу порекомендовать бесплатную замену Visual Studio, чтобы писать программы на C#
А что насчет VS Community 2015? Она так же бесплатна. Требуется только регистрация.
__________________
// no comments
За это сообщение автора поблагодарили: Ace of Database (1).
Старый 21.07.2017, 13:25   #7  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
В общем случае разные хитрые штуки можно сделать используя Reflection
параметры типов (type parameters) в AxХотя в вашем случае это всего-лишь массив. Он вроде как и так должен работать
А вообще проще всю логику в сборку на Net засунуть, которая в X++ уже более простой интерфейс предоставлять будет
Не очень понял как в моем случае использовать то что вы привели по ссылке, там все таки системные типы - их в аксапте и так можно использовать. А вот массив вида NdsRequest2NP[] - инициализировать не хочет.

Цитата:
Сообщение от dech Посмотреть сообщение
Попробуйте использовать метод доступа с типом Array.
Извините не понял, это в х++ надо где такое написать? Если что у меня Ax2009.. что-то я там такого не встречал.

Net сборку конечно можно сделать, но тогда зачем AIF? да и если честно я не силен, потом эту сборку надо будет всем пользователям на компьютеры закинуть в ...\BIN\?
Старый 21.07.2017, 13:54   #8  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Цитата:
Сообщение от Craz Посмотреть сообщение
Не очень понял как в моем случае использовать то что вы привели по ссылке, там все таки системные типы - их в аксапте и так можно использовать. А вот массив вида NdsRequest2NP[] - инициализировать не хочет.


Извините не понял, это в х++ надо где такое написать? Если что у меня Ax2009.. что-то я там такого не встречал.

Net сборку конечно можно сделать, но тогда зачем AIF? да и если честно я не силен, потом эту сборку надо будет всем пользователям на компьютеры закинуть в ...\BIN\?
У нас на DAX4 именно через прокси класс все работает, хотя то что ты говоришь тоже должно, ведь ты reference добавил и он должен был создать тоже подобие прокси класса. А все что до этого места нормально создается?

Сборку можно не в bin а в gac зарегистрировать

Попробовал сделать у себя ваш код, создал ServiceReference объект создается нормально

Последний раз редактировалось maldini; 21.07.2017 в 14:25.
Старый 22.07.2017, 07:22   #9  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Craz Посмотреть сообщение
Извините не понял, это в х++ надо где такое написать? Если что у меня Ax2009.. что-то я там такого не встречал.
Это пример для 2012, в вашем случае нужна работа с коллекцией вместо массива.
__________________
// no comments
Старый 24.07.2017, 10:35   #10  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Спасибо всем помучался со всякими способами в Х++, в итоге ничего не получилось. Пришлось сделать DLL на C# и работать через нее.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax2012 веб-сервисы и умеют ли они SOAP? Pandasama DAX: Программирование 1 09.11.2016 10:00
Сохранение файла на веб сервере rDenis DAX: Программирование 8 25.03.2009 09:51
Не могу добавить веб-пользователя! Pawlik DAX: Администрирование 5 14.12.2005 12:25
Перенос Веб проекта Koriolis DAX: Программирование 2 27.07.2005 16:46
Веб проектирование-формирование веб-странички kas DAX: Администрирование 1 31.05.2005 10:55
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:07.