-
Сайт ДПА (sta.gov.ua) надає можливість перевіряти клієнтів платників ПДВ по їхній базі, це може знадобитися бухгалтерам (юристам) при внесені даних по клієнту в програму 1С, так і для звірки вже внесених даних.
Адреса сторінки : http://sta.gov.ua/control/uk/vat/search, на яку потрібно через POST-запит
відправити значення поля для співставлення.
Привязка клієнта з бази 1С на сайт sta.gov.ua в обробці відбувається тільки по коду ЄДРПОУ.
(з передачею правда обовязкового параметра юридична чи фізична особа).
На формі обробки є тільки реквізит діалогу з типом «Справочник.Контрагенты»
і ідентифікатором «ПоточнийКонтрагент» ; ну і дві кнопки «Сформувати» і «Закрити».
Обробка повністю написана під конфігурацію 1С 7.7 «Бухгалтерський облік для України»
(1С Abbyy 7.7 «Бухгалтерский учет для Украины»), на «комплексну» переробляється без проблем , під інші конфігурації переробити також нічого складного.
-
Власне код обробки на 1С 7.7 з коментарями:
//**********************
Процедура Сформировать()
Если ПустоеЗначение(ПоточнийКонтрагент.ЕДРПОУ) = 1 Тогда
Предупреждение("Увага! Невнесений код ЄДРПОУ");
СтатусВозврата(0);
Возврат;
КонецЕсли;
Попытка
// опис методів роботи з обєктом WinHttpRequest через ОЛЕ
// взято з http://msdn.microsoft.com/en-us/library/aa384106.aspx
WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"Windows-1251");
//WinHttp.SetProxy(2,"192.168.1.1:3128");
// Задаєм параметри свого проксі сервера при потребі
WinHttp.Open("POST","http://sta.gov.ua/control/uk/vat/search",0);
// Другим параметром при потребі можна передавати також додатково GET-змінні
// звичайно що в форматі "?param1=value1¶m2=value2"
//WinHttp.SetCredentials("ProxyLogin","ProxyPassword",1);
// читай наприкінці статті, ще один варіант
// Задаєм параметром логін і пароль для проксі якщо потрібно
//!!! Якщо пряме підключення до інтернету то два попередніх рядки нерозкоментовуємо
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","Windows-1251");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "Windows-1251");
WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");
Если ПоточнийКонтрагент.ВидКонтрагента = Перечисление.ВидыКонтрагентов.ЧастноеЛицо Тогда
ПараметриПОСТ = "isJuridical=0";
Иначе
ПараметриПОСТ = "isJuridical=1";
КонецЕсли;
ПараметриПОСТ = ПараметриПОСТ + "&individualCode="+СокрЛП(ПоточнийКонтрагент.ЕДРПОУ);
WinHttp.Send(ПараметриПОСТ);// Параметром передаєм POST-змінні власне тут
// в форматі аналогічному до GET-медоту тільки без першого знака "?".
Таблица = СоздатьОбъект("Таблица");
Таблица.ИсходнаяТаблица("Таблица");
Таблица.ВывестиСекцию("Шапка");
// Код підключення регулярних виразів взятий з сайту:
// http://www.kb.mista.ru/article.php?id=698
// за що велике спасибі автору :
// romix
Истина=-1;
Ложь=0;
RegExp = СоздатьОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "<td>(.*)</td>[\s]*<td align=""right"">(.*)</td>";
// Опис патерна: Вертаємо весь текст і/або цифри між тегами,
// в результаті отримуєм спочатку назву реквізиту, потім сам реквізит
Matches=RegExp.Execute(WinHttp.ResponseText());
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений>0 Тогда
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Назва","строка",150,,"Назва",,,);
ТЗ.НоваяКолонка("Значення","строка",150,,"Значення",,,);
ТЗ.НоваяКолонка("Значення1С","строка",150,,"Значення1С",,,);
індекс_колонки = 1;
ТЗ.НоваяСтрока();
Для к = 0 По ЧислоВхождений-1 Цикл
Match = Matches.Item(к);
SubMatches = Match.SubMatches;
ЧислоПодвыражений=SubMatches.Count();
Для н = 0 По ЧислоПодвыражений-1 Цикл
SubMatch=SubMatches.Item(н);
Если SubMatch="" Тогда
Продолжить;
КонецЕсли;
Результат = СтрЗаменить(SubMatch,""","""");
// Тут вже методами 1С заміняємо код подвійних лапок на власне ".
ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,індекс_колонки,Результат);
індекс_колонки = індекс_колонки + 1;
Если індекс_колонки = 3 Тогда
індекс_колонки = 1;
ТЗ.НоваяСтрока();
КонецЕсли;
КонецЦикла;
КонецЦикла;
// Явно задаєм те що є в 1С в потрібні колонки
ТЗ.УстановитьЗначение(1,3,ПоточнийКонтрагент.ИНН);
ТЗ.УстановитьЗначение(2,3,ПоточнийКонтрагент.ЕДРПОУ);
ТЗ.УстановитьЗначение(3,3,ПоточнийКонтрагент.ПолнНаименование);
ТЗ.УстановитьЗначение(4,3,ПоточнийКонтрагент.НомерСвидетельства);
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
НазваПоля = СокрЛП(ТЗ.Назва);
ЗначенняПоляОтримане = СокрЛП(ТЗ.Значення);
ЗначенняПоля1С = СокрЛП(ТЗ.Значення1С);
Если ЗначенняПоляОтримане = ЗначенняПоля1С Тогда
Таблица.ВывестиСекцию("Стрічка");
Иначе
Таблица.ВывестиСекцию("Стрічка_п");// неспівпадіння виділяємо
КонецЕсли;
КонецЦикла;
Таблица.ТолькоПросмотр(1);
Таблица.Показать("Перевірка","");
WinHttp = 0;
RegExp = 0;
Иначе
Предупреждение("Незнайдена інформація");
КонецЕсли;
Исключение
Сообщить("Помилка зєднання:");
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
//*********************************
В результаті отримуємо гарний звіт : зліва назва реквізиту, потім значення отримане з сайту
і далі значення внесену в базу 1С.
Прінт скрін Таблиці для обробки:
Простенька форма для тестування передачі GET чи POST методів з програми
Результат створеного запиту гарно відображає з вказанням всіх потрібних параметрів
за що також спасибі автору Zdeněk Wagner (http://icebearsoft.euweb.cz/)
Тут я тестував регулярні вирази, можливо також стане в пригоді :
http://www.regular-expressions.info/vbscriptexample.html
Ще одне уточнення щодо використання об'єкту «WinHttp.WinHttpRequest.5.1».
В мене є включеним і проксі сервер і вихідом тільки через пароль на проксі, були проблеми з підключенням навіть з явно вказаними адресами проксі ,логіном і паролем, тому можу порекомендувати ще виконати такі команди в себе на компютері:
C:\WINDOWS\system32\proxycfg.exe -u
ну або proxycfg.exe /? і читаєм.
Після таких маніпуляцій в мене запрацювало без проблем.
Бонус для тих хто дочитав до кінця:
|