В информационной базе 1С есть справочник «Контрагенты», который предназначен для хранения списка всех контрагентов, с которыми взаимодействует организация (покупатели, поставщики, банки и прочие). Для того, чтобы ускорить создание новых контрагентов, а также исключить ошибки ручного ввода данных пользователем, нужно обеспечить автоматические заполнение данных контрагента по УНП, используя данные из государственного реестра плательщиков Республики Беларусь.
Принцип работы с реестром плательщиков
![image](https://static.tildacdn.com/tild3066-3263-4362-b066-646639373138/2020-04-29_14-00-01.png)
- Переходим на сайт: http://www.portal.nalog.gov.by/grp/
- Вводим УНП контрагента
- Нажимаем «Поиск» и получаем полные сведения об этом контрагенте: наименование (краткое и полное юридическое), юридический адрес, дата регистрации и пр.
![image](https://static.tildacdn.com/tild3762-3239-4036-b934-343665323634/2020-04-29_14-00-10.png)
![image](https://static.tildacdn.com/tild3736-3935-4666-b065-613664636633/2020-04-29_14-02-02.png)
![image](https://static.tildacdn.com/tild6538-3631-4630-a238-383837303765/2020-04-29_14-02-24.png)
![image](https://static.tildacdn.com/tild3165-3937-4639-b932-326165623330/2020-04-29_14-02-37.png)
Схема решения поставленной задачи
Вернемся к поставленной задаче: нужно заполнить данные контрагента на основании сведений в гос. реестре плательщиков. Для того, чтобы получить сведения о контрагенте из реестра нам достаточно сформировать следующий запрос:http://www.portal.nalog.gov.by/grp/getData?unp=УНП
где УНП — это введенная пользователем строка в поле «УНП» в карточке контрагента. После обращения к реестру мы получим от сервера ответ в формате XML, который в последующем сможем обработать и заполнить необходимые данные в карточке контрагента.Схематично решение задачи выглядит следующим образом:![image](https://static.tildacdn.com/tild3464-3930-4563-b531-333534323136/2020-04-29_14-03-45.png)
Шаг 2. Получаем ответ от HTTP-сервера в формате XML
Шаг 3. Выделяем из строки ответа необходимые данные (краткое и полное наименование, юридический адрес) и заполняем данные контрагента в 1С.
Программная реализация
Для начала в форме элемента справочника «Контрагенты» создадим команду «ЗаполнитьПоУНП» и соответствующий этой команде элемент формы:![image](https://static.tildacdn.com/tild3534-3532-4439-a666-633731373465/2020-04-29_14-03-56.png)
![image](https://static.tildacdn.com/tild6266-6435-4263-b166-386666366535/2020-04-29_14-04-04.png)
![image](https://static.tildacdn.com/tild6263-6138-4139-b766-393137323164/2020-04-29_14-04-12.png)
Можно провести ещё такую аналогию с мессенджерами (viber, telegram, skype и т.д.) . Для того чтобы общаться с кем-нибудь в мессенджере сначала нужно создать чат, а потом в этот чат можно отправлять сообщения адресату. В приведенной аналогии объект HTTPСоединение нужен для «создания чата», а HTTPЗапрос — для «отправки сообщений» в этот чат.
Ниже приведен код обработчика действия команды «ЗаполнитьПоУНП»:
---------------------------------------------------------------------------------
&НаКлиенте
Процедура ЗаполнитьПоУНП(Команда)
//проверка на заполненность "УНП"
Если НЕ ЗначениеЗаполнено(Объект.УНП) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Операция невозможна: не заполнен УНП!";
Сообщение.Поле = "Объект.УНП";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Хост = "www.portal.nalog.gov.by";
Ресурс = "grp/getData?unp="+СокрЛП(Объект.УНП);
//создание HTTP-соединения и HTTP-запроса
Соединение = Новый HTTPСоединение(Хост);
Заголовки = Новый Соответствие;
Заголовки.Вставить("host", Хост);
Запрос = Новый HTTPЗапрос(Ресурс, Заголовки);
//отправка HTTP-запроса серверу и получение ответа
Ответ = Неопределено;
Попытка
Ответ = Соединение.Получить(Запрос);
Исключение
Возврат;
КонецПопытки;
//чтение ответа HTTP-сервера
СведенияXML = Неопределено;
Попытка
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
СведенияXML = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Исключение
Возврат;
КонецПопытки;
Если ТипЗнч(СведенияXML) = Тип("ОбъектXDTO") Тогда
Если СведенияXML.Свойства().Получить("ROW")=Неопределено Тогда
Иначе
НаименованиеПолноеПортал = СокрЛП(СведенияXML.ROW.VNAIMP);
НаименованиеПортал = СокрЛП(СведенияXML.ROW.VNAIMK);
ЮрАдресПортал = СокрЛП(СведенияXML.ROW.VPADRES);
Если Лев(ЮрАдресПортал, 2) = ", " Тогда
ЮрАдресПортал = Прав(ЮрАдресПортал, СтрДлина(ЮрАдресПортал) - 2);
КонецЕсли;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
//проверка реквизитов на изменение, если изменились - задаем вопрос пользователю
Если НаименованиеПолноеПортал <> Объект.ПолноеНаименование
ИЛИ НаименованиеПортал <> Объект.Наименование
ИЛИ ЮрАдресПортал <> Объект.ЮридическийАдрес Тогда
ТекстВопроса = "Для УНП "+Объект.УНП+" в государственном реестре плательщиков соответствует юридическое лицо со следующими реквизитами
|
| Наименование: " + НаименованиеПортал + "
| Полное наименование: " + НаименованиеПолноеПортал + "
| Юридический адрес: " + ЮрАдресПортал + "
|
|Установить данные реквизиты для текущего контрагента?";
ДопПараметры = Новый Структура("НаименованиеПортал, НаименованиеПолноеПортал, ЮрАдресПортал",
НаименованиеПортал, НаименованиеПолноеПортал, ЮрАдресПортал);
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьПоУНПЗавершение", ЭтотОбъект, ДопПараметры);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоУНПЗавершение(Результат, ДополнительныеПараметры) Экспорт
//если пользователь ответил "Да" - заменяем данные контрагента сведениями из реестра
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Наименование = ДополнительныеПараметры.НаименованиеПортал;
Объект.ПолноеНаименование = ДополнительныеПараметры.НаименованиеПолноеПортал;
Объект.ЮридическийАдрес = ДополнительныеПараметры.ЮрАдресПортал;
КонецЕсли;
КонецПроцедуры
---------------------------------------------------------------------------------
В результате при нажатии на кнопку «Заполнить по УНП» в режиме «1С:Предприятие» получим следующий результат:
![image](https://static.tildacdn.com/tild3830-3838-4264-b134-633938306235/2020-04-29_14-04-19.png)
![image](https://static.tildacdn.com/tild3466-3066-4566-a665-336164346432/2020-04-29_14-04-29.png)
В этой статье мы подробно разобрали решение задачи автоматического заполнения реквизитов контрагента по данным государственного реестра Республики Беларусь.
Попробуйте реализовать такой же функционал в своей конфигурации и напишите в комментариях к этому посту все ли получилось. Если у вас остались вопросы, можете также их оставить в комментариях.