В информационной базе 1С есть справочник «Контрагенты», который предназначен для хранения списка всех контрагентов, с которыми взаимодействует организация (покупатели, поставщики, банки и прочие). Для того, чтобы ускорить создание новых контрагентов, а также исключить ошибки ручного ввода данных пользователем, нужно обеспечить автоматические заполнение данных контрагента по УНП, используя данные из государственного реестра плательщиков Республики Беларусь.
Принцип работы с реестром плательщиков
- Переходим на сайт: http://www.portal.nalog.gov.by/grp/
- Вводим УНП контрагента
- Нажимаем «Поиск» и получаем полные сведения об этом контрагенте: наименование (краткое и полное юридическое), юридический адрес, дата регистрации и пр.
При нажатии на гиперссылку «XML» открывается отдельная закладка, где те же самые данные контрагента представлены в формате XML:
Обратите внимание на адрес, который указан в адресной строке браузера, если указать другой УНП, то получим данные другого контрагента:
Если указать некорректный УНП, то результат будет следующий:
Схема решения поставленной задачи
Вернемся к поставленной задаче: нужно заполнить данные контрагента на основании сведений в гос. реестре плательщиков. Для того, чтобы получить сведения о контрагенте из реестра нам достаточно сформировать следующий запрос:http://www.portal.nalog.gov.by/grp/getData?unp=УНП
где УНП — это введенная пользователем строка в поле «УНП» в карточке контрагента. После обращения к реестру мы получим от сервера ответ в формате XML, который в последующем сможем обработать и заполнить необходимые данные в карточке контрагента.Схематично решение задачи выглядит следующим образом:Шаг 1. При нажатии на кнопку отправляем запрос HTTP-серверу, в качестве значения параметра unp устанавливаем введенный пользователем УНП
Шаг 2. Получаем ответ от HTTP-сервера в формате XML
Шаг 3. Выделяем из строки ответа необходимые данные (краткое и полное наименование, юридический адрес) и заполняем данные контрагента в 1С.
Программная реализация
Для начала в форме элемента справочника «Контрагенты» создадим команду «ЗаполнитьПоУНП» и соответствующий этой команде элемент формы:Теперь нужно создать обработчик действия для этой команды. Для работы с HTTP-сервером нам понадобятся два объекта встроенного языка 1С: HTTPCоединение и HTTPЗапрос:
Простыми словами объект HTTPСоединение нужен для того, чтобы мы могли «общаться» с HTTP-сервером. Само «общение» с ним построено на HTTP-запросах, для работы с которыми предназначен объект HTTPЗапрос. Запрос — это инструкция для сервера в определенном формате, который он понимает, и в соответствии с которым возвращает ответ. Например, запрос «верни данные контрагента по УНП 123456789» на языке, который понимает HTTP-сервер выглядит так: http://www.portal.nalog.gov.by/grp/getData?unp=123456789
Можно провести ещё такую аналогию с мессенджерами (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С:Предприятие» получим следующий результат:
Если согласиться с установкой реквизитов по данным реестра карточка контрагента автоматически заполнится сведениями:
Таким образом, поставленная задача решена.
В этой статье мы подробно разобрали решение задачи автоматического заполнения реквизитов контрагента по данным государственного реестра Республики Беларусь.
Попробуйте реализовать такой же функционал в своей конфигурации и напишите в комментариях к этому посту все ли получилось. Если у вас остались вопросы, можете также их оставить в комментариях.