Заполнение ОГРН с использованием Инструментов разработчика

21.04.17

Интеграция - WEB-интеграция

Вот и до нашей организации добралось требование указывать в отчетности для ГлавКонтроля ОГРН контрагента. Как всегда, задача возникла внезапно, и решить ее нужно было "вчера".

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Заполнение ОГРН с использованием инструментов разработчика:
.sel 23,31Kb
5 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Обозрев просторы интернетов, стало понятно, что владельцы информации сделали все, чтобы максимально затруднить массовое получение такой информации. К счастью, добрый человек  Sirruf, опубликовал обработку, позволяющую получать ОГРН с разных сайтов, в том числе,  fedresurs.ru.

Так как задача была срочная и одноразовая, было решено не городить огородов, а написать алгоритм для Инструментов разработчика уважаемого Сергея Старых (tormozit), позаимствовав процедуру получения данных из обработки ВводКонтрагентовПоДаннымФНС_ОбычныеФормы.

Опубликую это здесь, может кому-то пригодится.

Итак:

В конце концов, я решил использовать инструмент Консоль запросов (ИР).

В справочник Контрагенты был добавлен реквизит ахОГРН, который и требовалось заполнить актуальными данными.

Почему реквизит справочника?

Конечно, в соответствии с 1CZen, правильнее было бы добавить в конфигурацию новую таблицу, например РС:ОГРНКонтрагентов, раз уж не предусмотрено в типовой конфигурации УПП реквизита ОГРН в справочнике Контрагенты. но мы решили, что ОГРН - это у контрагента раз и навсегда, поэтому все-таки добавили именно реквизит справочника.

Запросом отобрал необходимых контрагентов и заявил дополнительные реквизиты, которые будут заполняться на последующем шаге:

ВЫБРАТЬ
	Контрагенты.Родитель КАК Родитель,
	Контрагенты.Код КАК КонтрагентКод,
	Контрагенты.Ссылка КАК КонтрагентСсылка,
	Контрагенты.НаименованиеПолное КАК ПолноеНаименование,
	Контрагенты.ИНН КАК СпрИНН,
	Контрагенты.КПП КАК СпрКПП,
	выразить("" как Строка(300)) КАК Наименование,
	выразить("" как Строка(15)) КАК ИНН,
	выразить("" как Строка(15)) КАК КПП,
	выразить("" как Строка(30))  КАК ОГРН,
	выразить("" как Строка(300))  КАК Адрес,
	выразить("" как Строка(300))  КАК url
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ  Истина
	И Контрагенты.Родитель = &РодительПапкаСбыт
	И НЕ Контрагенты.ЭтоГруппа
	И Контрагенты.ЮрФизЛицо = &ЮрФизЛицоЮрЛицо

Далее, заполнил текст модуля "Обработка строки результата" процедурой получения данных. Сервис fedresurs.ru был выбран из-за отсутствия необходимости ввода капчи на каждый запрос. Хотя, боюсь, что это скоро прикроют и капчу все-таки навесят. Сегодня, 14.04.2017, я этим алгоритмом загружал данные в копию информационной базы - капчи не было.

К тексту модуля небольшое пояснение:

Действие выполняется в два этапа: на первом этапе получаются данные от вебсервиса для контрагента (по ИНН) текущей строки набора данных и их запись в ячейки строки таблицы данных. На втором этапе получается объект справочника Контрагенты из ссылки в текущей строке набора данных и полученные данные записываются в объект. Так как в модуле Обработка результата Консоли запросов (ИР) результирующий набор данных (внезапно!)  а переносить получение данных в процедуру Обработка результата мне было лениво, оба этапа реализованы в одном модуле Обработка строки результата, а этап выбирается значением переменной ПолучениеИзInternet. Когда она равна правде - происходить загрузка данных, если ее установить в неправду - данные из набора данных записываются в справочник.

Кроме кода ОГРН, вебсервис возвращает еще правильное наименование контрагента и его юридический адрес. Посчитав, что это важные для выверки данные, я решил сохранить их в неиспользуемом у нас реквизите справочника ДополнительноеОписание. Туда же дописывается ссылка, по которой можно открыть страницу с данными этого контрагента на fedresurs.ru.

// Заполнение Адрес, ОГРН, url и правильного Наименования в Результат-коллекция
// данные для заполнения берутся с сайта http://www.fedresurs.ru
// алгоритм чтения страницы и разбора параметров взят из //infostart.ru/public/281276/

ФР = "http://se.fedresurs.ru";
ПолучениеИзInternet = ложь;
Состояние(СтрокаРезультата.ПолноеНаименование);

Если Не ПолучениеИзInternet Тогда
	КонтрагентОбъект = Справочники.Контрагенты.НайтиПоКоду(СтрокаРезультата.КонтрагентКод).ПолучитьОбъект();
	КонтрагентОбъект.ахОГРН = СтрокаРезультата.ОГРН;
	КонтрагентОбъект.ДополнительноеОписание = 
		 СтрокаРезультата.Наименование+Символы.ПС
		+"---***---"+Символы.ПС
		+СтрокаРезультата.Адрес+Символы.ПС
		+"---***---"+Символы.ПС
		+СтрокаРезультата.url;
	КонтрагентОбъект.Записать();
Иначе
	
	зИНН = СокрЛП(СтрокаРезультата.СпрИНН);
	Если СтрДлина(зИНН) <> 10 Тогда
		СтрокаРезультата.ИНН = "***UNKNOWN INN***";
		
	ИначеЕсли ПустаяСтрока(СтрокаРезультата.Адрес) тогда
		
		ГетЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
		ГетЗапрос.SetTimeouts(10000, 10000, 10000, 10000);
		СтрокаЗапроса = ФР+"/companies?filter=" + зИНН;
		ГетЗапрос.Open("GET", СтрокаЗапроса, 0); 
		
		Попытка
			ГетЗапрос.Send();
			ГетЗапрос.WaitForResponse();
		Исключение
			Сообщить(ОписаниеОшибки());
		КонецПопытки;
		
		ResponseText = ГетЗапрос.ResponseText();
		
		ResponseText = СтрЗаменить(ResponseText, Символы.ВК + Символы.ПС, "");
		
		Шаблон = "<div class=""vcard listItem""(.*?)</div>\s*</div>";
		
		СтрокаПоиска = ResponseText;
		//=====================>>>[НайтиВхожденияШаблона]
		//	ВхожденияШаблона = НайтиВхожденияШаблона(ResponseText, ШаблонПоиска);
		МассивСтрок = Новый Массив;
		RegExp = Новый COMОбъект("VBScript.RegExp");
		RegExp.IgnoreCase = Истина; //Игнорировать регистр
		RegExp.Global = Истина; //Поиск всех вхождений шаблона
		RegExp.MultiLine = Ложь; //Многострочный режим
		
		RegExp.Pattern = Шаблон; 
		Matches=RegExp.Execute(СтрокаПоиска);
		ЧислоВхождений=Matches.Count();
		Если ЧислоВхождений>0 Тогда 
			Для к = 0 По ЧислоВхождений-1 Цикл
				Match = Matches.Item(к);
				
				SubMatches = Match.SubMatches;
				ЧислоПодвыражений=SubMatches.Count();
				
				МассивПодстрок = Новый Массив;
				
				Для н = 0 По ЧислоПодвыражений-1 Цикл
					SubMatch=SubMatches.Item(н);
					Если SubMatch="" Тогда
						Продолжить;
					КонецЕсли;    
					
					МассивПодстрок.Добавить(SubMatch);
					
				КонецЦикла;    
				
				Если МассивПодстрок.Количество() > 0 тогда
					МассивСтрок.Добавить(МассивПодстрок);
				КонецЕсли;
				
			КонецЦикла;
		КонецЕсли;
		
		//=====================<<<[НайтиВхожденияШаблона]
		ВхожденияШаблона = МассивСтрок;	
		
		МассивСтрок = Новый Массив;
		Для каждого ТекВхождение из ВхожденияШаблона цикл
			РезПоискаСтр = ТекВхождение[0];
			//=====================>>>[РазобратьЭлементРезультатаПоискаФР]
			Результат = Новый Соответствие;
			
			ШаблонПоискаНаименования = "onclick="" window.location.assign\('(.*?)'.*<span class=""fn org"".*?>(.*?)<";
			
			
			СтрокаПоиска = РезПоискаСтр;
			Шаблон = ШаблонПоискаНаименования;
			//=====================>>>[НайтиВхожденияШаблона]
			//	ВхожденияШаблона = НайтиВхожденияШаблона(РезПоискаСтр, ШаблонПоискаНаименования);
			МассивСтрок = Новый Массив;
			RegExp = Новый COMОбъект("VBScript.RegExp");
			RegExp.IgnoreCase = Истина; //Игнорировать регистр
			RegExp.Global = Истина; //Поиск всех вхождений шаблона
			RegExp.MultiLine = Ложь; //Многострочный режим
			
			RegExp.Pattern = Шаблон; 
			Matches=RegExp.Execute(СтрокаПоиска);
			ЧислоВхождений=Matches.Count();
			Если ЧислоВхождений>0 Тогда 
				Для к = 0 По ЧислоВхождений-1 Цикл
					Match = Matches.Item(к);
					
					SubMatches = Match.SubMatches;
					ЧислоПодвыражений=SubMatches.Count();
					
					МассивПодстрок = Новый Массив;
					
					Для н = 0 По ЧислоПодвыражений-1 Цикл
						SubMatch=SubMatches.Item(н);
						Если SubMatch="" Тогда
							Продолжить;
						КонецЕсли;    
						
						МассивПодстрок.Добавить(SubMatch);
						
					КонецЦикла;    
					
					Если МассивПодстрок.Количество() > 0 тогда
						МассивСтрок.Добавить(МассивПодстрок);
					КонецЕсли;
					
				КонецЦикла;
			КонецЕсли;
			
			//=====================<<<[НайтиВхожденияШаблона]
			ВхожденияШаблона = МассивСтрок;	
			
			Если ВхожденияШаблона.Количество() > 0 тогда
				Результат.Вставить("url", ВхожденияШаблона[0][0]);
				СтрокаРезультата.url = ФР + СокрЛП(ВхожденияШаблона[0][0]);
				
				Наим = СокрЛП(ВхожденияШаблона[0][1]);
				Наим = СтрЗаменить(Наим, "&quot;", "");
				СтрокаРезультата.Наименование = Наим;
				Результат.Вставить("NAME", Наим);
			КонецЕсли;
			
			
			ШаблонПоискаИНН = "ИНН&nbsp;(\d+)";
			
			СтрокаПоиска = РезПоискаСтр;
			Шаблон = ШаблонПоискаИНН;
			//=====================>>>[НайтиВхожденияШаблона]
			//	ВхожденияШаблона = НайтиВхожденияШаблона(РезПоискаСтр, ШаблонПоискаИНН);
			МассивСтрок = Новый Массив;
			RegExp = Новый COMОбъект("VBScript.RegExp");
			RegExp.IgnoreCase = Истина; //Игнорировать регистр
			RegExp.Global = Истина; //Поиск всех вхождений шаблона
			RegExp.MultiLine = Ложь; //Многострочный режим
			
			RegExp.Pattern = Шаблон; 
			Matches=RegExp.Execute(СтрокаПоиска);
			ЧислоВхождений=Matches.Count();
			Если ЧислоВхождений>0 Тогда 
				Для к = 0 По ЧислоВхождений-1 Цикл
					Match = Matches.Item(к);
					
					SubMatches = Match.SubMatches;
					ЧислоПодвыражений=SubMatches.Count();
					
					МассивПодстрок = Новый Массив;
					
					Для н = 0 По ЧислоПодвыражений-1 Цикл
						SubMatch=SubMatches.Item(н);
						Если SubMatch="" Тогда
							Продолжить;
						КонецЕсли;    
						
						МассивПодстрок.Добавить(SubMatch);
						
					КонецЦикла;    
					
					Если МассивПодстрок.Количество() > 0 тогда
						МассивСтрок.Добавить(МассивПодстрок);
					КонецЕсли;
					
				КонецЦикла;
			КонецЕсли;
			
			//=====================<<<[НайтиВхожденияШаблона]
			ВхожденияШаблона = МассивСтрок;	
			
			Если ВхожденияШаблона.Количество() > 0 тогда
				//				Результат.Вставить("INN", ЗаменитьКривыеСимволы(СокрЛП(ВхожденияШаблона[0][0])));
				Результат.Вставить("INN", СокрЛП(ВхожденияШаблона[0][0]));
				СтрокаРезультата.ИНН = СокрЛП(ВхожденияШаблона[0][0]);
			КонецЕсли;
			
			ШаблонПоискаОГРН = "ОГРН&nbsp;(\d+)";
			СтрокаПоиска = РезПоискаСтр;
			Шаблон = ШаблонПоискаОГРН;
			//=====================>>>[НайтиВхожденияШаблона]
			// ВхожденияШаблона = НайтиВхожденияШаблона(РезПоискаСтр, ШаблонПоискаОГРН);
			МассивСтрок = Новый Массив;
			RegExp = Новый COMОбъект("VBScript.RegExp");
			RegExp.IgnoreCase = Истина; //Игнорировать регистр
			RegExp.Global = Истина; //Поиск всех вхождений шаблона
			RegExp.MultiLine = Ложь; //Многострочный режим
			
			RegExp.Pattern = Шаблон; 
			Matches=RegExp.Execute(СтрокаПоиска);
			ЧислоВхождений=Matches.Count();
			Если ЧислоВхождений>0 Тогда 
				Для к = 0 По ЧислоВхождений-1 Цикл
					Match = Matches.Item(к);
					
					SubMatches = Match.SubMatches;
					ЧислоПодвыражений=SubMatches.Count();
					
					МассивПодстрок = Новый Массив;
					
					Для н = 0 По ЧислоПодвыражений-1 Цикл
						SubMatch=SubMatches.Item(н);
						Если SubMatch="" Тогда
							Продолжить;
						КонецЕсли;    
						
						МассивПодстрок.Добавить(SubMatch);
						
					КонецЦикла;    
					
					Если МассивПодстрок.Количество() > 0 тогда
						МассивСтрок.Добавить(МассивПодстрок);
					КонецЕсли;
					
				КонецЦикла;
			КонецЕсли;
			
			//=====================<<<[НайтиВхожденияШаблона]
			ВхожденияШаблона = МассивСтрок;	
			
			Если ВхожденияШаблона.Количество() > 0 тогда
				//				Результат.Вставить("OGRN", ЗаменитьКривыеСимволы(СокрЛП(ВхожденияШаблона[0][0])));
				Результат.Вставить("OGRN", СокрЛП(ВхожденияШаблона[0][0]));
				СтрокаРезультата.ОГРН = СокрЛП(ВхожденияШаблона[0][0]);
			КонецЕсли;
			
			ШаблонПоискаАдреса = "Адрес:&nbsp;(.*?)<";
			СтрокаПоиска = РезПоискаСтр;
			Шаблон = ШаблонПоискаАдреса;
			//=====================>>>[НайтиВхожденияШаблона]
			// ВхожденияШаблона = НайтиВхожденияШаблона(РезПоискаСтр, ШаблонПоискаАдреса);
			МассивСтрок = Новый Массив;
			RegExp = Новый COMОбъект("VBScript.RegExp");
			RegExp.IgnoreCase = Истина; //Игнорировать регистр
			RegExp.Global = Истина; //Поиск всех вхождений шаблона
			RegExp.MultiLine = Ложь; //Многострочный режим
			
			RegExp.Pattern = Шаблон; 
			Matches=RegExp.Execute(СтрокаПоиска);
			ЧислоВхождений=Matches.Count();
			Если ЧислоВхождений>0 Тогда 
				Для к = 0 По ЧислоВхождений-1 Цикл
					Match = Matches.Item(к);
					
					SubMatches = Match.SubMatches;
					ЧислоПодвыражений=SubMatches.Count();
					
					МассивПодстрок = Новый Массив;
					
					Для н = 0 По ЧислоПодвыражений-1 Цикл
						SubMatch=SubMatches.Item(н);
						Если SubMatch="" Тогда
							Продолжить;
						КонецЕсли;    
						
						МассивПодстрок.Добавить(SubMatch);
						
					КонецЦикла;    
					
					Если МассивПодстрок.Количество() > 0 тогда
						МассивСтрок.Добавить(МассивПодстрок);
					КонецЕсли;
					
				КонецЦикла;
			КонецЕсли;
			
			//=====================<<<[НайтиВхожденияШаблона]
			ВхожденияШаблона = МассивСтрок;	
			
			
			Если ВхожденияШаблона.Количество() > 0 тогда
				//				Результат.Вставить("ADRESTEXT", ЗаменитьКривыеСимволы(СокрЛП(ВхожденияШаблона[0][0])));
				Результат.Вставить("ADRESTEXT", СокрЛП(ВхожденияШаблона[0][0]));
				СтрокаРезультата.Адрес = СокрЛП(ВхожденияШаблона[0][0]);
			КонецЕсли;
			
			
			//=====================<<<[РазобратьЭлементРезультатаПоискаФР]
			//		МассивСтрок.Добавить(РазобратьЭлементРезультатаПоискаФР(РезПоиска));
			МассивСтрок.Добавить(Результат);
		КонецЦикла;
	КонецЕсли;
КонецЕсли;

заполнение таблицы для 4848 строк прошло за 14 минут

Выполнение завершено, обработано 4 848 элементов за 0:13:57 (837 сек). Грубое среднее время обработки элемента - 172,65 мс

Готовый файл для Консоли запросов (ИР) можно скачать ниже.

Вступайте в нашу телеграмм-группу Инфостарт

загрузка ОГРН ИР Инструменты разработчика

См. также

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Программист Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

15250 руб.

20.12.2024    19015    97    29    

83

ЭДО и ОФД Мастера заполнения 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение добавляет возможность создавать ЭТрН и электронный заказ (заявку) на основании документа «Реализация товаров и услуг». При создании документа автоматически заполняются основные данные: участники перевозки, адреса, транспорт, водитель и сведения о грузе. Работает как расширение, не требует изменения типовой конфигурации и быстро подключается.

6000 руб.

13.05.2026    3141    33    7    

37

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    44150    76    45    

32

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5. Работает на возможностях платформы, внешние компоненты не используются.

6000 руб.

25.02.2026    5829    19    1    

21

WEB-интеграция Программист Бизнес-аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    7165    31    4    

32

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    25242    39    26    

29

WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена по API между конфигурацией 1С:Альфа-Авто 6 и порталом LogicStar. Позволяет работать с несколькими обменами LogicStars разных брендов (CHERY, OMODA, JAECOO, EXEED, TENET) в одной информационной базе в ручном и автоматическом режиме. Поддерживается выгрузка заказ-нарядов, реализаций товаров и товарных остатков.

20740 руб.

13.05.2025    2729    4    0    

7
Для отправки сообщения требуется регистрация/авторизация