Проверка статуса контрагента, проверяем ИНН/КПП на дату через SOAP-интерфейс на сайте Федеральной налоговой службы. Версия 2 по состоянию на 27.04.2017 г. работает в тестовом режиме.
* ============================================================================================================================== * Автор: vic119, Alex Roublev (доработка), Igor Korolyov (верификация, доработка), SSA (верификация, доработка) * Дата: 10.12.2014, 27.04.2017 * Описание: статус ИНН/КПП на дату * проверка контрагента через SOAP-интерфейс на сайте Федеральной налоговой службы https://npchk.nalog.ru/ * Документация: https://npchk.nalog.ru/ws2.doc * * Примечание: на 27.04.2017 на сайте ФНС сервис работает в тестовом режиме * * Доп. информация: Использование WEB сервиса для проверки ИНН/КПП контрагента: http://infostart.ru/public/439808/ * Обсуждение на форуме Foxclub: http://forum.foxclub.ru/read.php?29,645686 * * Библиотека: используется библиотека Microsoft XML Core Service версия 6 SP3 (msxml6.dll) * альтернатива - MSXML версия 4 SP2 (msxml4.dll) с вызовом объекта класса Msxml2.XMLHTTP.4.0 * описание версий https://support.microsoft.com/ru-ru/help/269238/list-of-microsoft-xml-parser-msxml-versions * * Параметры: * tcInn - ИНН контрагента * tcKpp - КПП контрагента * tcDate - дата, на которую проверяем в строковом формате 'дд.мм.гггг' * * Возврат: строка с описанием статуса проверки * ============================================================================================================================= #DEFINE TIME_LIMIT 30 && лимит времени при обращении к сайту ФНС (для выхода из цикла) CLEAR LOCAL lcInn AS STRING, lcKpp AS STRING, ldDate AS DATE lcInn = '6441012385' lcKpp = '583601001' ldDate = {^2014.12.08} LOCAL ARRAY vaState(1,2) vaState(1,1) = '-1' vaState(1,2) = '' Check_INN_KPP(m.lcInn, m.lcKpp, m.ldDate, @vaState) ?Check_Status_INN_KPP(@vaState) FUNCTION Check_INN_KPP() LPARAMETERS tcInn AS STRING, tcKpp AS STRING, tdDate AS DATE, vaState LOCAL ; loHttp AS 'Msxml2.XMLHTTP.6.0', ; && класс объекта для работы с SOAP-интерфейсом на сайте ФНС loError AS OBJECT, ; && объект для записи сообщения об ошибке lcRequest AS STRING, ; && xml-данные для запроса статуса контрагента ltTimeout AS DATETIME && время перед началом выполнения опроса сайта в цикле **************************************** * проверка корректности ввода параметров DO CASE CASE PCOUNT() < 3 tdDate = DATE() CASE PCOUNT() < 2 tcKpp = '' CASE PCOUNT() < 1 tcInn = '' ENDCASE DO CASE CASE EMPTY(tcInn) vaState(1,2) = 'не заполнен номер ИНН.' RETURN CASE TYPE('tcInn') <> 'C' OR LEN(CHRTRAN(tcInn, "0123456789", "")) > 0 vaState(1,2) = 'некорректно заполнен номер ИНН.' RETURN ENDCASE DO CASE CASE LEN(tcInn) = 10 && юр. лицо DO CASE CASE EMPTY(tcKpp) vaState(1,2) = 'не заполнен обязательный для юр. лица номер КПП.' RETURN CASE TYPE('tcKpp') <> 'C' OR LEN(tcKpp) <> 9 OR LEN(CHRTRAN(tcKpp, "0123456789", "")) > 0 vaState(1,2) = 'некорректно заполнен обязательный для юр. лица номер КПП.' RETURN ENDCASE CASE LEN(tcInn) = 12 && индивид. предприниматель IF !EMPTY(tcKpp) vaState(1,2) = 'номер КПП не указывается для ИП.' RETURN ENDIF ENDCASE DO CASE CASE EMPTY(tdDate) vaState(1,2) = 'не заполнена дата.' RETURN CASE TYPE('tdDate') <> 'D' vaState(1,2) = 'некорректно заполнена дата.' RETURN ENDCASE **************************************** TEXT TO lcRequest TEXTMERGE PRETEXT 1 + 2 NOSHOW <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://ws.unisoft/FNSNDSCAWS2/Request"> <soapenv:Header/> <soapenv:Body> <req:NdsRequest2> <req:NP INN="<<tcInn>>" KPP="<<tcKpp>>" DT="<<Transform(Day(tdDate), '@L 99')>>.<<Transform(Month(tdDate), '@L 99')>>.<<Transform(Year(tdDate), '9999')>>"/> </req:NdsRequest2> </soapenv:Body> </soapenv:Envelope> ENDTEXT TRY loHttp = CREATEOBJECT('Msxml2.XMLHTTP.6.0') WITH m.loHttp .OPEN('POST', 'http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl', .F.) .setRequestHeader('Content-Type', 'text/xml; charset=utf-8') .setRequestHeader('Content-length', TRANSFORM(LEN(lcRequest))) .Send(m.lcRequest) ltTimeout = DATETIME() + TIME_LIMIT * опрашиваем данные до тех пор, пока не будет получен ответ или не исчерпается лимит времени DO WHILE .ReadyState <> 4 DOEVENTS FORCE IF DATETIME() > m.ltTimeout EXIT ENDIF INKEY(0.5) ENDDO IF .STATUS = 200 && ответ был получен WITH .responseXML .setProperty('SelectionNamespaces', 'xmlns:rsp="http://ws.unisoft/FNSNDSCAWS2/Response"') vaState(1,1) = .selectSingleNode("//rsp:NdsResponse2/rsp:NP/@State").nodeValue && статус контрагента ENDWITH ELSE vaState(1,2) = 'ответ не получен, код ' + TRANSFORM(.STATUS) + ', ' + .StatusText + '.' ENDIF ENDWITH CATCH TO loError vaState(1,2) = 'Cтрока ' + TRANSFORM(loError.LINENO) + ', ' + loError.MESSAGE ENDTRY ENDFUNC FUNCTION Check_Status_INN_KPP() LPARAMETERS vaState LOCAL lnState AS INTEGER, lcError AS STRING lnState = CAST(vaState(1, 1) AS I) lcError = vaState(1, 2) RETURN ICASE ; (; m.lnState = -1, 'Данные контрагента не обработаны' + IIF(!EMPTY(lcError), ': ' + lcError, ''), ; m.lnState = 0, 'Налогоплательщик зарегистрирован в ЕГРН и имел статус действующего в указанную дату', ; m.lnState = 1, 'Налогоплательщик зарегистрирован в ЕГРН, но не имел статус действующего в указанную дату', ; m.lnState = 2, 'Налогоплательщик зарегистрирован в ЕГРН', ; m.lnState = 3, 'Налогоплательщик с указанным ИНН зарегистрирован в ЕГРН, КПП не соответствует ИНН или не указан', ; m.lnState = 4, 'Налогоплательщик с указанным ИНН не зарегистрирован в ЕГРН', ; m.lnState = 5, 'Некорректный ИНН', ; m.lnState = 6, 'Недопустимое количество символов ИНН', ; m.lnState = 7, 'Недопустимое количество символов КПП', ; m.lnState = 8, 'Недопустимые символы в ИНН', ; m.lnState = 9, 'Недопустимые символы в КПП', ; m.lnState = 10, 'КПП не должен использоваться при проверке ИП', ; m.lnState = 11, 'Некорректный формат даты', ; m.lnState = 12, 'Некорректная дата (ранее 01.01.1991 или позднее текущей даты)', ; 'Сатус контрагента не определен (' + TRANSFORM(m.lnState) + ')' ; ) ENDFUNC
Автор: vic119, Alex Roublev (доработка)
Вложенные файлы
# |
Название |
Тип файла |
Размер |
---|---|---|---|
1 | 698check_counteragent | .zip | 2,00 КБ |