Бухгалтер і комп'ютер.Четвер, 28.03.2024, 17:04

Вітаю Вас Гість | RSS
Головна | Статті | Вхід
Меню сайту

Категорії каталога
Бухгалтер і комп'ютер [8]
Все що потрібно бухгалтерам для роботи за комп'ютером
Програмування на 1С [9]
Все що стосується програмування бухгалтерських програм "1С" версій 7.7 і 8.1.

Друзі сайту

Головна » Статті » Програмування на 1С


Отримання і перевірка інформації про клієнта напряму в програму 1С з сайту sta.gov.ua .

     Сайт ДПА (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&param2=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,"&#034;","""");

                                                           // Тут вже методами 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 /? і читаєм.

Після таких маніпуляцій в мене запрацювало без проблем.
 
 
Бонус для тих хто дочитав до кінця:
Готова зовнішня обробка (*.ert) для скачування є тут http://commerce.at.ua/load/0-0-0-1-20.
Категорія: Програмування на 1С | Додав: Admin (04.05.2009)
Переглядів: 35905 | Коментарі: 39 | Рейтинг: 4.8/10 |
Всього коментарів: 171 2 »
17 SergWeamn  
0
<a href=http://zmkshop.ru/stati/stroitelstvo-kholodnogo-sklada-iz-svarnogo-dvutavra/>как просверлить двутавровую балку</a>

15 Владимир  
0
Подскажите а возможно переписать под сайт http://sts.gov.ua/reestr

16 Admin  
0
Правильно говорите что надо теперь информацию начинать забирать с нового сайта налоговой, но скорей всего что так просто не получится, там ведь теперь каптча есть, и на полном автомате как было наверное не будет уже . sad

14 Admin  
0
Переписав обробку також і під 8-ку, оформив більш менш її і виклав для скачування і тестування в Каталог файлів.

13 Admin  
0
Зібрав докупи все що було в одну готову зовнішню обробку.
Качайте і тестуйте...

12 Admin  
0
Найпростіше це в експлорері подивитись на вміст сторінки з середини:
8-й рядок:
<form method="post" action="http://hroch486.icpf.cas.cz/cgi-bin/echo.pl">
Це і є адрес для використання в запитах для POSt i GET.

11 ROM  
0
Хочу теж саме зробити з http://hroch486.icpf.cas.cz/formpost.html
Мені у відповідь вертається цяж сторінка. Вчому ж може проблема?

10 Admin  
0
"0" обрізається не патерном, а він взагалі відсутній в результаті отриманому з сайту податкової.
Я на форумі податкової писав про такий результат, але не думаю що це швидко вирішеться з їх сторони....

9 chicago  
0
+8 не обрізалось до "1234567" (без нуля)?

8 chicago  
0
А як змінити стрічку RegExp.Pattern = "<td>(.*)</td>[\s]*<td align=""right"">(.*)</td>", щоб наприклад значення номеру реєстрації "01234567" не обрізалось до "01234567" (без нуля)?

Дякую.


7 Admin  
0
п.Георгий подякував за корисний лінк.
Я тут на сайті попробую викласти обробку для перевірки по двох сайтах одночасно,
плюс внесу всі побажання до існуючої перевірки на сайті sta.gov.ua.

1-10 11-16
Ім`я *:
Email *:
Код *:

Статистика


Copyright MyCorp © 2024