21.07.2017, 10:47 | #1 |
Участник
|
Работа с Веб-сервисом налоговой по проверке контрагента
Добрый день,
Появилась задача проверять контрагентов в нашей доблестной налоговой службе. У них есть веб-сервис по адресу 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; } Соответственно как правильно инициализировать массив из вот таких неправильных типов? Если же написать просто X++: ndsReqArray[0] = ndsReq; Спасибо! |
|
21.07.2017, 10:54 | #2 |
Участник
|
Цитата:
параметры типов (type parameters) в Ax Хотя в вашем случае это всего-лишь массив. Он вроде как и так должен работать А вообще проще всю логику в сборку на Net засунуть, которая в X++ уже более простой интерфейс предоставлять будет Последний раз редактировалось S.Kuskov; 21.07.2017 в 11:00. |
|
21.07.2017, 12:12 | #3 |
Участник
|
Проверка контрагента через налоговую с помощью C#
http://arxont.blogspot.ru/2015/10/c.html Для тренировки сначала напишите на C# утилиту командной строки. И не обязательно всё средствами Аксапты реализовывать.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
21.07.2017, 12:19 | #4 |
Участник
|
Попробуйте использовать метод доступа с типом 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 |
Участник
|
На всякий случай, могу порекомендовать бесплатную замену 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 |
Участник
|
А что насчет VS Community 2015? Она так же бесплатна. Требуется только регистрация.
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: Ace of Database (1). |
21.07.2017, 13:25 | #7 |
Участник
|
Цитата:
Сообщение от S.Kuskov
В общем случае разные хитрые штуки можно сделать используя Reflection
параметры типов (type parameters) в AxХотя в вашем случае это всего-лишь массив. Он вроде как и так должен работать А вообще проще всю логику в сборку на Net засунуть, которая в X++ уже более простой интерфейс предоставлять будет Извините не понял, это в х++ надо где такое написать? Если что у меня Ax2009.. что-то я там такого не встречал. Net сборку конечно можно сделать, но тогда зачем AIF? да и если честно я не силен, потом эту сборку надо будет всем пользователям на компьютеры закинуть в ...\BIN\? |
|
21.07.2017, 13:54 | #8 |
Участник
|
Цитата:
Сообщение от Craz
Не очень понял как в моем случае использовать то что вы привели по ссылке, там все таки системные типы - их в аксапте и так можно использовать. А вот массив вида NdsRequest2NP[] - инициализировать не хочет.
Извините не понял, это в х++ надо где такое написать? Если что у меня Ax2009.. что-то я там такого не встречал. Net сборку конечно можно сделать, но тогда зачем AIF? да и если честно я не силен, потом эту сборку надо будет всем пользователям на компьютеры закинуть в ...\BIN\? Сборку можно не в bin а в gac зарегистрировать Попробовал сделать у себя ваш код, создал ServiceReference объект создается нормально Последний раз редактировалось maldini; 21.07.2017 в 14:25. |
|
22.07.2017, 07:22 | #9 |
Участник
|
Это пример для 2012, в вашем случае нужна работа с коллекцией вместо массива.
__________________
// no comments |
|
24.07.2017, 10:35 | #10 |
Участник
|
Спасибо всем помучался со всякими способами в Х++, в итоге ничего не получилось. Пришлось сделать DLL на C# и работать через нее.
|
|