Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов

12.09.18

Разработка - Математика и алгоритмы

Если вам интересно проверить контрагенте в ФНС, вам поможет данная публикация. Весь алгоритм работы строится на основе данных, полученных с сервиса http://npchk.nalog.ru совершенно бесплатно.

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
ПроверкаКонтрагентов.cf (Подсистема "Проверка контрагента" (готовый алгоритм))
.cf 56,70Kb
60
60
1 SM
Скачать Купить за 1 850 руб.
котИмитацияРаботыРегламетногоЗадания.epf (Обработка имитация запуска регламентного задания)
.epf 5,95Kb
10
10
1 SM
Скачать Купить за 1 850 руб.
котКонтрагенты.epf (Пример динамического списка)
.epf 6,91Kb
16
16
1 SM
Скачать Купить за 1 850 руб.

 

 Добрый день, Коллеги!

 

Возникла задача, понять и вытащить алгоритм проверки контрагентов в ФНС из типовой регламентированной отчетности. Алгоритм проверки на статус регистрации в ФНС и верность заполнения КПП. Задача развилась в идею вывести статус проверки ФНС в список справочника Контрагентов. Так же необходимо проверять статус ежедневно, чтобы держать базу с актуальными данными.

В современных конфигурациях (УТ11, КА2, ERP) данный алгоритм реализован на уровне типового решения, в старых конфигурациях в роде моей Комплексной Автоматизации 1.1 нет такой возможности, поэтому можно в путь пустить – творчество.

Программирование ведётся на конфигурации Комплексная Автоматизация 1.1.96.3 в режиме совместимости 8.2.13 (думаю, подойдёт к УТ10.3 и УПП),  обычные формы, но в управляемых как по мне было бы на много проще, но с другой стороны в тех конфигурациях велосипед уже есть.

 Что вы узнаете, прочитав данную статью: 

 

  1. Как получить данные из ФНС о контрагенте - http://npchk.nalog.ru
  2. Как вывести статус ФНС в табличную часть формы
  3. Создание в таблице формы колонки – картинки
  4. Как выделить цветом данные при выводе строк в таблице обычной формы и другое

Приступим.

Создаем новые объекты конфигурации

 

Сейчас все помешаны на расширениях, но не все могут этим воспользоваться, по этому представляю список доработок.

Общий список новых объектов:

  1. Общий модуль – «котПроверкаКонтрагентов»
  2. Картинка – «котСтатусыФНС»
  3. Регистр сведений «котКонтрагентыСтатусФНС»
  4. Регламентное задание «котЕжедневнаяПроверкаКонтрагентов»

 Общий модуль – «котПроверкаКонтрагентов» 

 

Создаем новый объект конфигурации – «общий модуль».

В моём случае название модуля – «котПроверкаКонтрагентов».

Настройки модуля:

 
 Программный код общего модуля

///////////////////////////////////////////////////////////////////////////////////
//	Данная разработка скачана из публикации:
//	//infostart.ru/public/755141/
//	Котов Д.В. (//infostart.ru/profile/564942/) 
//	Дата начала разработки - 30.01.2018
//	На основание бесплатного сервиса (http://npchk.nalog.ru) 
//	Важно понимать, что на данный момент сервис работает в тестовом режиме
///////////////////////////////////////////////////////////////////////////////////

Процедура ПроверкаКонтрагентов() Экспорт
	ДанныеПолучены = ЛОЖЬ;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	СтатусыФНС.Контрагент
	|ИЗ
	|	РегистрСведений.котКонтрагентыСтатусФНС КАК СтатусыФНС
	|ГДЕ
	|	СтатусыФНС.Статус = ""1""";	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		УстановитьФильтр = ЛОЖЬ;
	Иначе
		УстановитьФильтр = ИСТИНА;
		КонтрагентыКоторыеНеДействуют = Результат.Выгрузить();
	КонецЕсли;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Контрагенты.Ссылка КАК Контрагент,
	|	Контрагенты.ИНН,
	|	Контрагенты.КПП,
	|	ВЫРАЗИТЬ("""" КАК СТРОКА(100)) КАК Состояние,
	|	&ТекущайДата КАК Дата
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|	Контрагенты.ИНН <> """"" +
	?(УстановитьФильтр,"И НЕ Контрагенты.Ссылка В(&ГруппаКонтрагентов)","");
	Запрос.УстановитьПараметр("ТекущайДата",ТекущаяДата());
	Запрос.УстановитьПараметр("ГруппаКонтрагентов",КонтрагентыКоторыеНеДействуют);
	ДанныеКонтрагента = Запрос.Выполнить().Выгрузить();		
	ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагента,ДанныеПолучены);
	Если ДанныеПолучены Тогда
		Для Каждого Строка Из ДанныеКонтрагента Цикл		
			НаборЗаписей = РегистрыСведений.котКонтрагентыСтатусФНС.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Контрагент.Установить(Строка.Контрагент); 
			НаборЗаписей.Прочитать();
			Если НаборЗаписей.Количество() > 0 Тогда
				ЗаписьТекущая = НаборЗаписей.Получить(0);
				Пропускать = ЗаписьТекущая.Статус = "1"; 
			Иначе
				Пропускать = ЛОЖЬ;
			КонецЕсли;
			Если НЕ Пропускать Тогда
				НаборЗаписей.Очистить();
				НаборЗаписей.Записать();
				НоваяЗапись = НаборЗаписей.Добавить(); 		   
				НоваяЗапись.Контрагент = Строка.Контрагент; 
				НоваяЗапись.Статус = Строка.Состояние; 
				НаборЗаписей.Записать(ИСТИНА); 		
			КонецЕслИ;					
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

Функция ПроверитьКонтрагентаПоСсылке(Контрагент,Дата = Неопределено) Экспорт
	Если Дата = Неопределено Тогда
		Дата = ТекущаяДата();	
	КонецЕсли;
	Если Контрагент.ИНН <> "" Тогда 
		ДанныеПолучены = ЛОЖЬ;
		ДанныеКонтрагента = Новый ТаблицаЗначений;
		ДанныеКонтрагента.Колонки.Добавить("Контрагент", 	Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
		ДанныеКонтрагента.Колонки.Добавить("ИНН", 			Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(12)));
		ДанныеКонтрагента.Колонки.Добавить("КПП", 			Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(9)));
		ДанныеКонтрагента.Колонки.Добавить("Дата", 			Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.Дата)));
		ДанныеКонтрагента.Колонки.Добавить("Состояние", 	Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
		ТекущийКонтрагент = ДанныеКонтрагента.Добавить();
		ТекущийКонтрагент.Контрагент = Контрагент;
		ТекущийКонтрагент.ИНН = Контрагент.ИНН;
		ТекущийКонтрагент.КПП = Контрагент.КПП;
		ТекущийКонтрагент.Дата = Дата;
		ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагента,ДанныеПолучены);
		Если ДанныеПолучены Тогда
			Ответ = ДанныеКонтрагента[0].Состояние;	
			СостояниеФНС = СостояниеНаОсновеОтветаСервиса(Контрагент,Ответ);
		Иначе
			СостояниеФНС = "Сервер ФНС - не доступен, попробуйте позже";
		КонецЕсли;
	Иначе
		СостояниеФНС = "У контрагента не заполнен ИНН";
	КонецЕсли;	
	Возврат СостояниеФНС;
КонецФункции

Процедура ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагентов, ЕстьДоступКВебСервисуФНС)	
	КоличествоКонтрагентов = ДанныеКонтрагентов.Количество();
	ЕстьДоступКВебСервисуФНС = ЕстьДоступКВебСервисуФНС();
	Если КоличествоКонтрагентов = 0 
		ИЛИ НЕ ЕстьДоступКВебСервисуФНС 
		Тогда
		Возврат;
	КонецЕсли;		
	Прокси = ПолучитьWSПрокси();	
	ПространствоИмен = "http://ws.unisoft/FNSNDSCAWS2/Request";	
	РазмерПорции = 10000; //возможно ограничения, в типовой так написано, максимум в запросе 10 000 контрагентов	
	КоличествоЗапросов = ?(КоличествоКонтрагентов % РазмерПорции = 0, КоличествоКонтрагентов / РазмерПорции, Цел(КоличествоКонтрагентов / РазмерПорции) + 1);		
	Для НомерПорции = 1 По КоличествоЗапросов Цикл 		
		МинимальныйНомерКонтрагента 	= Мин(РазмерПорции * (НомерПорции - 1), КоличествоКонтрагентов);
		МаксимальныйНомерКонтрагента 	= Мин(РазмерПорции * НомерПорции, КоличествоКонтрагентов) - 1;
		WSЗапрос = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип(ПространствоИмен, "NdsRequest2"));		
		Для ИндексТекущегоКонтрагента = МинимальныйНомерКонтрагента По МаксимальныйНомерКонтрагента Цикл			
			ДанныеКонтрагента = ДанныеКонтрагентов[ИндексТекущегоКонтрагента];
			ДобавитьКонтрагентаВЗапросКСервису(WSЗапрос, Прокси, ПространствоИмен, ДанныеКонтрагента); 			
		КонецЦикла;		
		Если WSЗапрос.NP.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;	
		ЕстьДоступКВебСервисуФНС = ЕстьДоступКВебСервисуФНС();
		Попытка
			NdsResponse = Прокси.NdsRequest2(WSЗапрос);
		Исключение		
			ЗаписьЖурналаРегистрации("Проверка контрагентов.NdsRequest",УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));			
			NdsResponse = Неопределено;	// Страхуемся от ошибки "Timeout wаs reached".
		КонецПопытки;		
		Если NdsResponse <> Неопределено Тогда
			ОбработатьОтветСервиса(NdsResponse, ДанныеКонтрагентов, МинимальныйНомерКонтрагента, МаксимальныйНомерКонтрагента);				
		КонецЕсли;		
	КонецЦикла; 	
КонецПроцедуры

Процедура ДобавитьКонтрагентаВЗапросКСервису(WSЗапрос, Прокси, ПространствоИмен, ДанныеКонтрагента)	
	Попытка	
		WSКонтрагент = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип(ПространствоИмен, "NdsRequest2_NP"));	
		WSКонтрагент.INN = ДанныеКонтрагента.ИНН;	
		//ИП - проверяются БЕЗ указания КПП, иначе вернётся ошибка с кодом "10"
		Если ДанныеКонтрагента.Контрагент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда
			КонтрагентЮР = ИСТИНА;
		Иначе
			КонтрагентЮР = ЛОЖЬ;
		КонецЕсли;
		Если ЗначениеЗаполнено(ДанныеКонтрагента.КПП) И КонтрагентЮР Тогда
			WSКонтрагент.KPP = ДанныеКонтрагента.КПП;
		Иначе
			WSКонтрагент.KPP = "";
		КонецЕсли;
		Если ЗначениеЗаполнено(ДанныеКонтрагента.Дата)Тогда
			WSКонтрагент.DT = ДатаСтрокой(ДанныеКонтрагента.Дата);
		КонецЕсли;
		WSЗапрос.NP.Добавить(WSКонтрагент);
	Исключение		
		ФиксацияОшибкиВЖурналеРегистрации("Проверка контрагентов. Ошибка в заполнение запроса по контрагенту код: " +
		ДанныеКонтрагента.Контрагент.Код,ИнформацияОбОшибке());
		ДанныеКонтрагента.Состояние = "W"; //Ошибка в данных		
	КонецПопытки; 				
КонецПроцедуры

Процедура ОбработатьОтветСервиса(NdsResponse, ДанныеКонтрагентовДляПроверкиСервисом, МинимальныйНомерКонтрагента, МаксимальныйНомерКонтрагента)	
	ИндексТекущегоОтвета = 0;
	Для ИндексТекущегоКонтрагента = МинимальныйНомерКонтрагента По МаксимальныйНомерКонтрагента Цикл 
		ДанныеКонтрагента = ДанныеКонтрагентовДляПроверкиСервисом[ИндексТекущегоКонтрагента];
		Попытка
			ОтветПоКонтрагенту 			= NdsResponse.NP[ИндексТекущегоОтвета];
			СостояниеВОтвете 			= ОтветПоКонтрагенту.State;
			ДанныеКонтрагента.Состояние = СостояниеВОтвете;			
		Исключение		
			ФиксацияОшибкиВЖурналеРегистрации("Проверка контрагентов.Обработка ответа от веб-сервиса",ИнформацияОбОшибке());		
		КонецПопытки;			
		ИндексТекущегоОтвета = ИндексТекущегоОтвета + 1;		
	КонецЦикла;				
КонецПроцедуры

Функция ЕстьДоступКВебСервисуФНС()	
	Возврат ПолучитьWSПрокси() <> Неопределено;	
КонецФункции

Функция ПолучитьWSПрокси() 	
	WSПрокси = Неопределено;
	Попытка
		WSПрокси = ОбщегоНазначения.WSПрокси(
		"http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl",
		"http://ws.unisoft",
		"FNSNDSCAWS2",
		"FNSNDSCAWS2_Port",
		Неопределено,
		Неопределено,
		120);
	Исключение
		ФиксацияОшибкиВЖурналеРегистрации("Проверка контрагентов. Ошибка подключени WSПрокси.",ИнформацияОбОшибке())			
	КонецПопытки;
	Возврат WSПрокси;	
КонецФункции

Функция СостояниеНаОсновеОтветаСервиса(ДанныеКонтрагента, Ответ) Экспорт	
	Если Ответ = "0" Тогда
		Состояние = "Контрагент есть в базе ФНС";
	ИначеЕсли Ответ = "1" Тогда
		Если СтрДлина(ДанныеКонтрагента.ИНН) = 12 Тогда
			Состояние = "Не действует";
		Иначе
			Состояние = "Не действует или изменен КПП";
		КонецЕсли;
	ИначеЕсли Ответ = "3" Тогда
		Состояние = "КПП не соответствует данным базы ФНС";
	ИначеЕсли Ответ = "4" Тогда
		Состояние = "Контрагент отсутствует в базе ФНС";
	ИначеЕсли Ответ = "5" ИЛИ Ответ = "6" ИЛИ Ответ = "8" Тогда
		Состояние = "Ошибка. Некорректный ИНН";
	ИначеЕсли Ответ = "7" ИЛИ Ответ = "9" Тогда
		Состояние = "Ошибка. Некорректный КПП";
	ИначеЕсли Ответ = "11" ИЛИ Ответ = "12" Тогда
		Состояние = "Ошибка. Некорректная дата проверки";
	ИначеЕсли Ответ = "10" Тогда
		Состояние = "Ошибка. ИП заведено как юридическое лицо";
	ИначеЕсли Ответ = "W" Тогда
		Состояние = "Возникла ошибка заполнения данных контрагента";
	КонецЕсли;		
	Возврат Состояние;	
КонецФункции

Функция НомерКартинкиСтатуса(Статус) Экспорт	
	Если Статус = "0" Тогда
		СтатусКартинка = 3;
	ИначеЕсли Статус = "1" Тогда
		СтатусКартинка = 2;
	Иначе
		СтатусКартинка = 1;
	КонецЕсли;		
	Возврат СтатусКартинка;	
КонецФункции

Функция ДатаСтрокой(Дата)	
	Результат = Неопределено;
	Если ТипЗнч(Дата) = Тип("Строка") Тогда 
		Результат = Дата;
	ИначеЕсли ТипЗнч(Дата) = Тип("Дата") Тогда 
		Результат = Формат(Дата, "ДФ=dd.MM.yyyy");
	КонецЕсли;	
	Возврат Результат;	
КонецФункции

Процедура ФиксацияОшибкиВЖурналеРегистрации(ИмяСобытия,ИнформацияОбОшибке)
	ЗаписьЖурналаРегистрации(НСтр("ru = '"+ИмяСобытия+"'"),УровеньЖурналаРегистрации.Ошибка,,,ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));	
КонецПроцедуры

Процедура ОчиститьРегистрСведенийСДаннымиПроверки() Экспорт
	НаборЗаписей = РегистрыСведений.котКонтрагентыСтатусФНС.СоздатьНаборЗаписей();
	НаборЗаписей.Записать();
КонецПроцедуры

 

 Картинка – «котСтатусыФНС» 

 

Создаем новый объект – Общие картинки, название «котСтатусыФНС».

Подгружаем картинку -         <<< скачайте

Описание иконок статуса ФНС:

 Регистр сведений – «котКонтрагентыСтатусФНС» 

 

Создаем регистр сведений – «котКонтрагентыСтатусФНС»

Основные

Периодичность: Непериодический

Режим записи: Независимый

Данные

Измерение – Контрагент – тип СправочникСсылка.Контрагенты

Ресурс – Статус – тип Строка (150)

Настройка прав за вами!

 Регламентное задание «котЕжедневнаяПроверкаКонтрагентов» 

 

Создаем объект конфигурации регламентное задание «котЕжедневнаяПроверкаКонтрагентов».

Имя метода – тыкаем по «лупе» и автоматически создаем процедуру в нашем модуле «котПроверкаКонтрагентов».

В созданную процедуру дописываем код вызова процедуры проверки контрагентов:

Процедура котЕжедневнаяПроверкаКонтрагентов() Экспорт
	ПроверкаКонтрагентов();
КонецПроцедуры

                                                                               

Доработка объектов конфигурации

 

Мы определились с новыми объектами, переходим к изменению объектов конфигурации.

Общий список изменений:

  1. Справочник – «Контрагенты», ФормаСписка
  2. Справочник – «Контрагенты», ФормаВыбора

Необходимо убедиться, что выше перечисленные объекты сняты с «замка».

 Общий принцип доработки обоих форм (повторяем и для ФормаСписка и для ФормаВыбора) 

 

Необходимо создать колонку «котСтатусФНС» в таблице формы – «СправочникСписок».

 ВНИМАНИЕ!  Не забывайте что 1С поддерживает копирование, да же колонок из одной формы в другую.

Добавляем колонку и настраиваем значение свойств:

Так же задаем свойства полю ввода:

Находим процедуру «ПриВыводеСтроки» событий таблицы формы «СправочникСписок» и проваливаемся в неё если есть или проваливаемся чтобы создать искомую:

В процедуру добавляем код:

	//Котов Д.В. +++ 31.01.2018
	//Так же можно выделять цветом всю строку целиком, тут ваш полёт фантазии не ограничен
	Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьТекст = ЛОЖЬ;
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьФлажок = ЛОЖЬ;
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьКартинку = ИСТИНА;		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		|	котКонтрагентыСтатусФНС.Статус
		|ИЗ
		|	РегистрСведений.котКонтрагентыСтатусФНС КАК котКонтрагентыСтатусФНС
		|ГДЕ
		|	котКонтрагентыСтатусФНС.Контрагент = &Контрагент";	
		Запрос.УстановитьПараметр("Контрагент", ОформлениеСтроки.ДанныеСтроки.Ссылка);	
		Результат = Запрос.Выполнить();	
		Если Результат.Пустой() Тогда
			ОформлениеСтроки.Ячейки.котСтатусФНС.ИндексКартинки = 0;
		Иначе
			Выборка = Результат.Выбрать();
			Выборка.Следующий();		
			ОформлениеСтроки.Ячейки.котСтатусФНС.ИндексКартинки = котПроверкаКонтрагентов.НомерКартинкиСтатуса(Выборка.Статус); 
		КонецЕсли;
	КонецЕсли;
	//Котов Д.В. --- 31.01.2018

Проверяем работу

 

Для проверки работы, так удобнее, нам потребуется простая обработка с двумя кнопками.

Одна "Проверить контрагентов" будет вызывать процедуру – 

котПроверкаКонтрагентов. котЕжедневнаяПроверкаКонтрагентов();

Вторая кнопка вызовет процедуру –

котПроверкаКонтрагентов. ОчиститьРегистрСведенийСДаннымиПроверки();

Запустив обработку, нажимаем кнопку «Проверить контрагентов» и ждём.

 ВНИМАНИЕ!  Выполнение кода может ни к чему не привести, так как сервер ФНС не стабилен! Может откликнуться только со 2 раза… 10…100 раза… или сразу. По этому если регистр сведений не заполнился, жмем ещё раз!

Когда видим, что регистр сведений успешно заполнен:

Открываем смело справочник контрагентов и видим радостную картинку:

Запускаем регламентное задание

 

Для запуска регламентного задания, вам потребуется - КонсольЗаданий:

Можно скачать с ИТС: https://its.1c.ru/db/metod8dev/content/3752/hdoc

Так же расширенная версия консоли заданий включена в "Инструменты разработчика": http://devtool1c.ucoz.ru/

Настраиваем задание, регулярность выполнение ваше пожелания:

Резюме

 

Функционал можно расширить, в моём случае помимо фиксации статуса ФНС будет так же фиксация в разрезе документов реализации и заказов, чтобы можно было подсвечивать заказы и реализации как в новых конфигурациях в зависимости от проблемности контрагента. Под проблемностью мы конечно понимает либо нет регистрации в ФНС или содержит ошибки КПП.

Кто внимательный то мог заметить, что в модуле есть функция ПроверитьКонтрагентаПоСсылке(Контрагент,Дата = Неопределено), данная функция позволяет по ссылке контрагента проверить его статус в ФНС, ответ ввиде строковой расшифровки, успешная – «Контрагент есть в базе ФНС». Если дата не указана, проверка производиться на текущую дату, иначе можно посмотреть допустим на момент сделки.

Так же вы можете расшифровать статус ФНС (он числовой от 0 до 12) с помощью функции СостояниеНаОсновеОтветаСервиса(ДанныеКонтрагента, Ответ).

Не забывайте важный момент – сервис работает в тестовом режиме – а это может быть всё что угодно!

Удачного кодинга!

 

 

Посткриптум

 

Наверное многие так же как я в режиме мистической совместимости 8.2.13 ведёт разработку и на управляемых формах. Так вот, всё, что я описывал в пункте «Доработка объектов конфигурации», намного проще реализуется не в таблице обычной формы, а в динамическом списке управляемой формы. Смотрите сами как легко (без кода почти) добавить колонку со статусом.

  1. Корректируем запрос добавив наш статус:

ВЫБРАТЬ
	Контрагенты.Код,
	Контрагенты.Наименование,
	Контрагенты.ИНН,
	Контрагенты.КПП,
	Контрагенты.НаименованиеПолное,
	ВЫБОР
		КОГДА котКонтрагентыСтатусФНС.Статус ЕСТЬ NULL
			ТОГДА 0
		КОГДА котКонтрагентыСтатусФНС.Статус = "0"
			ТОГДА 3
		КОГДА котКонтрагентыСтатусФНС.Статус = "1"
			ТОГДА 2
		ИНАЧЕ 1
	КОНЕЦ КАК ФНС
ИЗ
	Справочник.Контрагенты КАК Контрагенты
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.котКонтрагентыСтатусФНС КАК котКонтрагентыСтатусФНС
		ПО Контрагенты.Ссылка = котКонтрагентыСтатусФНС.Контрагент
  1. Перетаскиваем новую колонку в таблицу на форме и настраиваем ряд свойств:

Результат работы:

Как по мне динамический список и СКД это просто магия и песня!

Предлагаю вашему внимаю мою процедуру программного создания динамического списка:

 //infostart.ru/public/728597/

 Описание файлов к публикации 

 

Зачем тут файлы? Ну возможно, кому-то лень всё это повторить и проще накатить сравнением объединением готовый продукт, который легко ставится на КА 1.1, по всей видимости встанет и на УПП 1.3, УТ 10.3.

А также это единственная материальная благодарность автора, от которой не откажусь ;)

ПроверкаКонтрагентов.cf – готовый CF, содержащий рабочий алгоритм, описанный в данный статье, устанавливается сравнением объединением (кто умеет).

котИмитацияРаботыРегламетногоЗадания.epf – обработка, описанная выше.

котКонтрагенты.epf – обработка содержит пример работы динамического списка из посткриптума.

Проверка контрагентов ФНС Налоги ИНН КПП клиентов партнеров

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    2368    stopa85    12    

34

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    5777    user1959478    50    

35

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    2288    maksa2005    8    

24

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    9057    7    SpaceOfMyHead    17    

60

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    3566    RustIG    7    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.

23.11.2022    2663    gzharkoj    14    

24

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    8440    7    kalyaka    11    

44
Отзывы
31. rpgshnik 3753 09.02.18 11:59 Сейчас в теме
Статью уже править не буду, но у себя добавил, советую и вам всем кто заинтересовался добавить ;)
Зачем это? Комментарии к публикации можете почитать и поймёте что почти три дня сервис лежал.
Сервис не стабильный - по этому лучше держать актуальные данные или что бы он отключался и пользователь понимал - что данной проверке нельзя доверять.

1. Константу - тип булево - включить/выключить функционал проверки контрагентов в ФНС
2. Константу - тип дата - содержит дату актуальной проверки

В формы которые я использую в справочнике Контрагентов я добавил в модуль формы переменную:

Перем ВыводитьСтатусФНС;


Затем я подвязал на открытие форм, процедуре ПриОткрытие

	ЭлементыФормы.СправочникСписок.Колонки.котСтатусФНС.Видимость = Константы.котПроверкаКонтрагентовВключен.Получить();
	ВыводитьСтатусФНС = НачалоДня(Константы.котПроверкаКонтрагентовФНСДатаПроверки.Получить()) = НачалоДня(ТекущаяДата());


Затем ещё скорректировал код при выводе строки:

	//Котов Д.В. +++ 31.01.2018
	//Так же можно выделять цветом всю строку целиком, тут ваш полёт фантазии не ограничен
	Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьТекст = ЛОЖЬ;
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьФлажок = ЛОЖЬ;
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьКартинку = ИСТИНА;
		Если ВыводитьСтатусФНС Тогда	//Котов Д.В. +++ 09.02.2018		
			Запрос = Новый Запрос;
			Запрос.Текст = "ВЫБРАТЬ
			|	котКонтрагентыСтатусФНС.Статус
			|ИЗ
			|	РегистрСведений.котКонтрагентыСтатусФНС КАК котКонтрагентыСтатусФНС
			|ГДЕ
			|	котКонтрагентыСтатусФНС.Контрагент = &Контрагент";	
			Запрос.УстановитьПараметр("Контрагент", ОформлениеСтроки.ДанныеСтроки.Ссылка);	
			Результат = Запрос.Выполнить();	
			Если Результат.Пустой() Тогда
				ОформлениеСтроки.Ячейки.котСтатусФНС.ИндексКартинки = 0;
			Иначе
				Выборка = Результат.Выбрать();
				Выборка.Следующий();		
				ОформлениеСтроки.Ячейки.котСтатусФНС.ИндексКартинки = котПроверкаКонтрагентов.НомерКартинкиСтатуса(Выборка.Статус); 
			КонецЕсли;
		Иначе
			ОформлениеСтроки.Ячейки.бгбСтатусФНС.ИндексКартинки = 0;	//Котов Д.В. +++ 09.02.2018
		КонецЕсли;
	КонецЕсли;
	//Котов Д.В. --- 31.01.2018
Показать


Результат данных действий простой:

1. Мы можем отключить алгоритм проверки статусов контрагентов в режиме предприятия онлайн!
2. Мы будем иметь только актуальные статусы, если каким-то образом проверка не прошла - тогда все иконки статусов будут "серыми".

Доработки общего модуля:

Ещё я добавил в общий модуль проверки - регламентной процедуры следующий код в самом начале:

Процедура котЕжедневнаяПроверкаКонтрагентов() Экспорт
	//Котов Д.В. +++ 09.02.2018 
	//Если механизм проверки не включен, тогда и проверять не нужно. Чтобы регламетной задание не отключать ;)
	Если НЕ Константы.котПроверкаКонтрагентовВключен.Получить() Тогда Возврат; КонецЕсли;
	//Решено актуализировать один раз на текущую дату, смотрите как вам удобнее.	
	Если НачалоДня(Константы.котПроверкаКонтрагентовФНСДатаПроверки.Получить()) = НачалоДня(ТекущаяДата()) Тогда Возврат; КонецЕсли;
	//Котов Д.В. --- 09.02.2018
	ПроверкаКонтрагентов();
КонецПроцедуры
Показать


А процедуре по проверке контрагентов "ПроверкаКонтрагентов()" добавил строчки по записи даты в константу:
Процедура ПроверкаКонтрагентов() Экспорт
	ДанныеПолучены = ЛОЖЬ;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	СтатусыФНС.Контрагент
	|ИЗ
	|	РегистрСведений.котКонтрагентыСтатусФНС КАК СтатусыФНС
	|ГДЕ
	|	СтатусыФНС.Статус = ""1""";	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		УстановитьФильтр = ЛОЖЬ;
	Иначе
		УстановитьФильтр = ИСТИНА;
		КонтрагентыКоторыеНеДействуют = Результат.Выгрузить();
	КонецЕсли;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Контрагенты.Ссылка КАК Контрагент,
	|	Контрагенты.ИНН,
	|	Контрагенты.КПП,
	|	ВЫРАЗИТЬ("""" КАК СТРОКА(100)) КАК Состояние,
	|	&ТекущайДата КАК Дата
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|	Контрагенты.ИНН <> """"" +
	?(УстановитьФильтр,"И НЕ Контрагенты.Ссылка В(&ГруппаКонтрагентов)","");
	Запрос.УстановитьПараметр("ТекущайДата",ТекущаяДата());
	Запрос.УстановитьПараметр("ГруппаКонтрагентов",КонтрагентыКоторыеНеДействуют);
	ДанныеКонтрагента = Запрос.Выполнить().Выгрузить();		
	ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагента,ДанныеПолучены);
	Если ДанныеПолучены Тогда
		Для Каждого Строка Из ДанныеКонтрагента Цикл		
			НаборЗаписей = РегистрыСведений.котКонтрагентыСтатусФНС.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Контрагент.Установить(Строка.Контрагент); 
			НаборЗаписей.Прочитать();
			Если НаборЗаписей.Количество() > 0 Тогда
				ЗаписьТекущая = НаборЗаписей.Получить(0);
				Пропускать = ЗаписьТекущая.Статус = "1"; 
			Иначе
				Пропускать = ЛОЖЬ;
			КонецЕсли;
			Если НЕ Пропускать Тогда
				НаборЗаписей.Очистить();
				НаборЗаписей.Записать();
				НоваяЗапись = НаборЗаписей.Добавить(); 		   
				НоваяЗапись.Контрагент = Строка.Контрагент; 
				НоваяЗапись.Статус = Строка.Состояние; 
				НаборЗаписей.Записать(ИСТИНА); 		
			КонецЕслИ;					
		КонецЦикла;
		//Котов Д.В. +++ 09.02.2018 
		ДатаПроверки = Константы.схпПроверкаКонтрагентовФНСДатаПроверки;
		ДатаПроверки.Установить(ТекущаяДата());
		//Котов Д.В. --- 09.02.2018
	КонецЕсли;
КонецПроцедуры
Показать
maksa2005; loy; +2 Ответить
65. wildhog 469 16.08.23 11:43 Сейчас в теме
(64) Работает. Но сервис переехал. Вместо http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl теперь https://npchk.nalog.ru:443/FNSNDSCAWS_2?wsdl
Вот тут нашел эту информацию.
https://infostart.ru/1c/tools/439808/
Sherdrada; rpgshnik; +2 Ответить
52. d4rkmesa 27.07.20 10:08 Сейчас в теме
Неплохо, для себя примерно аналогичную доработку делал. Есть одна проблема с сервисом, при изменениях, навроде изменения КПП, для юрлица возвращается иногда(или даже довольно часто) статус "1 - Налогоплательщик зарегистрирован в ЕГРН, но не имел статус действующего в указанную дату", меняешь КПП - все хорошо. Поэтому на этот статус слишком завязываться не стоит, к примеру, если при размещении заказа проверяется статус контрагента.
rpgshnik; +1 Ответить
62. Elf77 10 29.10.21 13:14 Сейчас в теме
(58)https://forum.infostart.ru/forum67/topic271142/ - есть решение. файл, который рекомендуют, помогает.
rpgshnik; +1 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. smirnov.es 21 01.02.18 11:12 Сейчас в теме
Кот проверка контрагентов
Прикрепленные файлы:
maksa2005; Delapukick; user621724_Dimav1979; ixijixi; LordKim; madonov; sckif; ice-net; корум; bserge88; siddy; Lo1jke; jif; pavlov_dv; Артано; Interrupted; rpgshnik; +17 Ответить
36. пользователь 24.05.18 05:41
Сообщение было скрыто модератором.
...
37. пользователь 27.05.18 06:38
Сообщение было скрыто модератором.
...
2. pm74 202 01.02.18 12:24 Сейчас в теме
(0) оформление по "феншую" ))

добавим в "копилку" , вдруг пригодиться
denismal; Артано; rpgshnik; +3 Ответить
3. Поручик 4684 01.02.18 12:42 Сейчас в теме
Пригодится
maksa2005; madonov; корум; rpgshnik; +4 Ответить
4. nbeliaev 831 01.02.18 22:26 Сейчас в теме
небольшое замечание - у Вас идет обращение к БД в процедуре при ВыводеСтроки. Запросов будет меньше, если поместить это в ПриПолученииДанных
корум; CSiER; rpgshnik; +3 Ответить
8. rpgshnik 3753 02.02.18 02:35 Сейчас в теме
(4) спасибо, я подумаю над этим.
5. triviumfan 94 01.02.18 22:47 Сейчас в теме
Странно, ведь было какое-то ограничение на количество запросов или ещё что, поэтому сервис вскоре стал платным (как и заполнение по ИНН). Далее 1с его в подписку запихало, что не удивительно. А теперь опять что ли бесплатно будет?:)
6. triviumfan 94 02.02.18 00:23 Сейчас в теме
У меня постоянно ответ "W", то бишь
Возникла ошибка заполнения данных контрагента
7. triviumfan 94 02.02.18 01:05 Сейчас в теме
(6) Извиняюсь, проверка на ЮрЛицо у меня не проходила, т.к. метаданные разные. Исправил.
Но заметил ещё кое-что - возвращаемый статус отличается от того, что сам сайт возвращает.
9. rpgshnik 3753 02.02.18 02:45 Сейчас в теме
(7) а какой именно статус возвращает?
12. triviumfan 94 02.02.18 09:48 Сейчас в теме
(9) Да я на ночь глядя не разобрался. Сейчас вижу, что все корректно, просто вы перефразировали статусы.
К примеру, статус 3 на сайте возвращает "Налогоплательщик с указанным ИНН зарегистрирован в ЕГРН", а у вас "КПП не соответствует данным базы ФНС".
Хотя в файле описании вообще "Налогоплательщик с указанным ИНН зарегистрирован в ЕГРН, КПП не соответствует ИНН или не указан*.
Вот я и запутался :)
Прикрепленные файлы:
Описание.doc
10. Automatik 946 02.02.18 06:00 Сейчас в теме
Что значат иконки в колонке "ФНС" ? (Какие статусы какой картинке соответствуют)
11. rpgshnik 3753 02.02.18 06:06 Сейчас в теме
(10) в публикации написано
13. vasilev2015 2730 02.02.18 11:14 Сейчас в теме
Статья симпатичная, но сам сервис плоховат. Иногда не отвечает, возвращает только статус. Пробовал использовать платный сервис, встроенный в бухгалтерию 3.0 - он еще хуже. Юридический адрес нашей фирмы возвращает с ошибкой. Заплаченные 4 тр сервис съел за неделю, хотя должно было хватить на 6 месяцев. Нет бочки меда без ложки дегтя.
rpgshnik; +1 Ответить
14. rpgshnik 3753 02.02.18 11:44 Сейчас в теме
(13) сервис плоховат, но он пока обрабатывает пакетами контрагентов и более менее правдивый. Остальные все платные... А так согласен, в статье то же писал, что может с 10-ого раза ответить))
15. brrart 27 03.02.18 08:51 Сейчас в теме
(14) Это уж точно. что более менее. Не все данные правдивы. У нас реализована проверка через этот сервис, но пока тоже в тестовом режиме. Хотим в автоматическом режиме отказывать в отгрузках клиентам, не прошедшим данную проверку. Но пока не можем, потому как попадаются такие, которые эту проверку не проходят, а сервис той-же ФНС https://egrul.nalog.ru/ говорит что с ними всё ок. Смотрим в сторону Контура с это API.
rpgshnik; +1 Ответить
16. rpgshnik 3753 03.02.18 13:02 Сейчас в теме
17. webester 26 04.02.18 18:56 Сейчас в теме
ибится сердце перестало, вот заморочился то с оформлением...
maksa2005; al_ban; корум; Interrupted; +4 Ответить
18. grin_64 37 07.02.18 05:20 Сейчас в теме
Сервис больше недоступен?
19. rpgshnik 3753 07.02.18 05:38 Сейчас в теме
(18) странно буквально на днях работал все было отлично(( посмотрим сегодня.
Может поднимут...
20. Milanick 07.02.18 09:04 Сейчас в теме
Я у себя , по аналогии, ТНВЭД кода также реализовывал. Подгружались с сайта в регистр , а затем синхронизация с номенклатурным справочником :)
21. Milanick 07.02.18 09:05 Сейчас в теме
1С жулики, бесплатное превратили в платное :)
rpgshnik; +1 Ответить
22. OksanaSub 54 07.02.18 11:55 Сейчас в теме
23. rpgshnik 3753 07.02.18 11:56 Сейчас в теме
(22) сейчас не ясная ситуация, сервис не мой, сервис принадлежит самим ФНС... может работы ведутся.
Сам пока жду и наблюдаю за ситуацией. Так как уже много, что на этом завязано.

ссылка на сам сайт - http://npchk.nalog.ru/
28. rpgshnik 3753 08.02.18 09:43 Сейчас в теме
24. shard 281 07.02.18 13:18 Сейчас в теме
Восхищен оформлением :)
rpgshnik; +1 Ответить
25. rpgshnik 3753 07.02.18 13:36 Сейчас в теме
26. newbas 534 07.02.18 13:39 Сейчас в теме
оформление отличное.
Сайт почему-то не работает
rpgshnik; +1 Ответить
27. rpgshnik 3753 08.02.18 09:42 Сейчас в теме
29. grin_64 37 08.02.18 10:35 Сейчас в теме
Ура, заработало...
rpgshnik; +1 Ответить
30. rpgshnik 3753 08.02.18 10:46 Сейчас в теме
31. rpgshnik 3753 09.02.18 11:59 Сейчас в теме
Статью уже править не буду, но у себя добавил, советую и вам всем кто заинтересовался добавить ;)
Зачем это? Комментарии к публикации можете почитать и поймёте что почти три дня сервис лежал.
Сервис не стабильный - по этому лучше держать актуальные данные или что бы он отключался и пользователь понимал - что данной проверке нельзя доверять.

1. Константу - тип булево - включить/выключить функционал проверки контрагентов в ФНС
2. Константу - тип дата - содержит дату актуальной проверки

В формы которые я использую в справочнике Контрагентов я добавил в модуль формы переменную:

Перем ВыводитьСтатусФНС;


Затем я подвязал на открытие форм, процедуре ПриОткрытие

	ЭлементыФормы.СправочникСписок.Колонки.котСтатусФНС.Видимость = Константы.котПроверкаКонтрагентовВключен.Получить();
	ВыводитьСтатусФНС = НачалоДня(Константы.котПроверкаКонтрагентовФНСДатаПроверки.Получить()) = НачалоДня(ТекущаяДата());


Затем ещё скорректировал код при выводе строки:

	//Котов Д.В. +++ 31.01.2018
	//Так же можно выделять цветом всю строку целиком, тут ваш полёт фантазии не ограничен
	Если НЕ ОформлениеСтроки.ДанныеСтроки.ЭтоГруппа Тогда
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьТекст = ЛОЖЬ;
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьФлажок = ЛОЖЬ;
		оформлениеСтроки.Ячейки.котСтатусФНС.ОтображатьКартинку = ИСТИНА;
		Если ВыводитьСтатусФНС Тогда	//Котов Д.В. +++ 09.02.2018		
			Запрос = Новый Запрос;
			Запрос.Текст = "ВЫБРАТЬ
			|	котКонтрагентыСтатусФНС.Статус
			|ИЗ
			|	РегистрСведений.котКонтрагентыСтатусФНС КАК котКонтрагентыСтатусФНС
			|ГДЕ
			|	котКонтрагентыСтатусФНС.Контрагент = &Контрагент";	
			Запрос.УстановитьПараметр("Контрагент", ОформлениеСтроки.ДанныеСтроки.Ссылка);	
			Результат = Запрос.Выполнить();	
			Если Результат.Пустой() Тогда
				ОформлениеСтроки.Ячейки.котСтатусФНС.ИндексКартинки = 0;
			Иначе
				Выборка = Результат.Выбрать();
				Выборка.Следующий();		
				ОформлениеСтроки.Ячейки.котСтатусФНС.ИндексКартинки = котПроверкаКонтрагентов.НомерКартинкиСтатуса(Выборка.Статус); 
			КонецЕсли;
		Иначе
			ОформлениеСтроки.Ячейки.бгбСтатусФНС.ИндексКартинки = 0;	//Котов Д.В. +++ 09.02.2018
		КонецЕсли;
	КонецЕсли;
	//Котов Д.В. --- 31.01.2018
Показать


Результат данных действий простой:

1. Мы можем отключить алгоритм проверки статусов контрагентов в режиме предприятия онлайн!
2. Мы будем иметь только актуальные статусы, если каким-то образом проверка не прошла - тогда все иконки статусов будут "серыми".

Доработки общего модуля:

Ещё я добавил в общий модуль проверки - регламентной процедуры следующий код в самом начале:

Процедура котЕжедневнаяПроверкаКонтрагентов() Экспорт
	//Котов Д.В. +++ 09.02.2018 
	//Если механизм проверки не включен, тогда и проверять не нужно. Чтобы регламетной задание не отключать ;)
	Если НЕ Константы.котПроверкаКонтрагентовВключен.Получить() Тогда Возврат; КонецЕсли;
	//Решено актуализировать один раз на текущую дату, смотрите как вам удобнее.	
	Если НачалоДня(Константы.котПроверкаКонтрагентовФНСДатаПроверки.Получить()) = НачалоДня(ТекущаяДата()) Тогда Возврат; КонецЕсли;
	//Котов Д.В. --- 09.02.2018
	ПроверкаКонтрагентов();
КонецПроцедуры
Показать


А процедуре по проверке контрагентов "ПроверкаКонтрагентов()" добавил строчки по записи даты в константу:
Процедура ПроверкаКонтрагентов() Экспорт
	ДанныеПолучены = ЛОЖЬ;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	СтатусыФНС.Контрагент
	|ИЗ
	|	РегистрСведений.котКонтрагентыСтатусФНС КАК СтатусыФНС
	|ГДЕ
	|	СтатусыФНС.Статус = ""1""";	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		УстановитьФильтр = ЛОЖЬ;
	Иначе
		УстановитьФильтр = ИСТИНА;
		КонтрагентыКоторыеНеДействуют = Результат.Выгрузить();
	КонецЕсли;
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	Контрагенты.Ссылка КАК Контрагент,
	|	Контрагенты.ИНН,
	|	Контрагенты.КПП,
	|	ВЫРАЗИТЬ("""" КАК СТРОКА(100)) КАК Состояние,
	|	&ТекущайДата КАК Дата
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|	Контрагенты.ИНН <> """"" +
	?(УстановитьФильтр,"И НЕ Контрагенты.Ссылка В(&ГруппаКонтрагентов)","");
	Запрос.УстановитьПараметр("ТекущайДата",ТекущаяДата());
	Запрос.УстановитьПараметр("ГруппаКонтрагентов",КонтрагентыКоторыеНеДействуют);
	ДанныеКонтрагента = Запрос.Выполнить().Выгрузить();		
	ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагента,ДанныеПолучены);
	Если ДанныеПолучены Тогда
		Для Каждого Строка Из ДанныеКонтрагента Цикл		
			НаборЗаписей = РегистрыСведений.котКонтрагентыСтатусФНС.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Контрагент.Установить(Строка.Контрагент); 
			НаборЗаписей.Прочитать();
			Если НаборЗаписей.Количество() > 0 Тогда
				ЗаписьТекущая = НаборЗаписей.Получить(0);
				Пропускать = ЗаписьТекущая.Статус = "1"; 
			Иначе
				Пропускать = ЛОЖЬ;
			КонецЕсли;
			Если НЕ Пропускать Тогда
				НаборЗаписей.Очистить();
				НаборЗаписей.Записать();
				НоваяЗапись = НаборЗаписей.Добавить(); 		   
				НоваяЗапись.Контрагент = Строка.Контрагент; 
				НоваяЗапись.Статус = Строка.Состояние; 
				НаборЗаписей.Записать(ИСТИНА); 		
			КонецЕслИ;					
		КонецЦикла;
		//Котов Д.В. +++ 09.02.2018 
		ДатаПроверки = Константы.схпПроверкаКонтрагентовФНСДатаПроверки;
		ДатаПроверки.Установить(ТекущаяДата());
		//Котов Д.В. --- 09.02.2018
	КонецЕсли;
КонецПроцедуры
Показать
maksa2005; loy; +2 Ответить
32. LomayaZakat 27.03.18 15:29 Сейчас в теме
Не работает, при ответе выдает ошибку
maksa2005; +1 Ответить
35. пользователь 19.04.18 06:20
Сообщение было скрыто модератором.
...
33. LomayaZakat 28.03.18 08:10 Сейчас в теме
Проблема решилась на стороне фаервола
rpgshnik; +1 Ответить
34. rpgshnik 3753 02.04.18 05:52 Сейчас в теме
(33) отлично, в командировке был)) вообще сервис носит тестовый характер, было дело лежал почти неделю
38. Yashazz 4763 30.05.18 12:53 Сейчас в теме
Увидел фразу
WSПрокси = ОбщегоНазначения.WSПрокси(

и сразу захотелось резко минуснуть за столь откровенную хрень.
Оформление оформлением, но так не делают. Что это за отсылки к неведомым общим модулям?
63. Светлый ум 407 22.02.22 09:19 Сейчас в теме
(38)
ОбщегоНазначения.WSПрокси


Так в типововых глобальным поиском сразу же этот код выпадает. Код есть в БСП и БИП

Функция ПроксиСервиса(ОписаниеОшибки)	
	Прокси = Неопределено;
	ПараметрыАутентификации = ПараметрыАутентификацииВСервисе();
	Если ПараметрыАутентификации = Неопределено Тогда	
		// Служебный текст. Должен быть обработан на клиенте.
		ОписаниеОшибки = "НеУказаныПараметрыАутентификации"; 		
	Иначе	
		Попытка Прокси = ОбщегоНазначения.WSПрокси
39. AASycheva 05.06.18 12:14 Сейчас в теме
Здравствуйте. Вы сняли cf с возможности скачивания? Почему-то не удается скачать его. В техподдержке сказали, что вы закрыли возможность скачивания. Но странно, ведь здесь все еще есть возможность отправить себе на почту. Да и поддержку вы ведете
40. rpgshnik 3753 06.06.18 04:14 Сейчас в теме
(39) Здравствуйте. Ни чего не закрывал и не чего не снимал, очень странно.
Судя по логу то после вас и до вас успешно скачали пользователи (скриншот ниже).

Вы первый раз скачиваете с инфостарта? Вам на почту должна придти ссылка, а через неё уже скачать.
Прямого скачивания (не через почту) здесь просто нет на инфостарте.
Прикрепленные файлы:
41. AASycheva 07.06.18 20:39 Сейчас в теме
(40) нет, не в первый. В том-то и дело, что приходит ссылка, по которой невозможно скачать. В техподдержке, видимо, решили не разбираться и свалили всё на автора публикации. Спасибо, буду разбираться дальше
rpgshnik; +1 Ответить
42. grin_64 37 13.11.18 16:19 Сейчас в теме
Добрый день!
Почему-то не работает сервис. Только желтые и красные иконки.
На сайте http://npchk.nalog.ru все хорошо
43. rpgshnik 3753 14.11.18 04:23 Сейчас в теме
(42) Добрый день!
Можете попробовать очистить регистр сведений со статусами и прогрузить их все по новой. Если регистр заполниться - значит функционал работает.
44. miwka77 28.12.18 15:45 Сейчас в теме
Вдвоем с программистом подняли у себя данный сервис. Все работало, но с октября 2018 перестало. У нас клиент-сервер. Версия сервера и клиента 8.2 (130). Я - Админ. Программист проверила процедуру несколько раз - она типовая, как у топикстартера.
Опытным путем нашли, что запрос вроде отсылается, а вот ответ то ли не приходит, то ли приходит неверный. В одной из похожих тем видел совет про кодировку файла-ответа, но как проверить не знаю. Я провел несколько экспериментов. На том же сервере, но на другом порту работает Трешечный сервер. Прикрутил к нему базу и загрузил в нее DT-шник базы 8.2 (где не работает запрос). Оно там работает!
Сформулировал несколько вопросов, на которые не могу найти ответа:
1. если бы было дело в файерволе, то не работало бы и в трешке. Сервер то один. Да?
2. пробовал стандартные и классические "почистить кэши", "проверить настройки Интернет на сервере" - все чистил и проверял. Инет есть, сервак 8.2 вообще переинсталлил с удалением записей из реестра и каталогов. Инет работает без прокси, если что. Все ли я попробовал?
3. При открытии URL-запроса инфы из ФНС, у меня немного разный ответ, если открывать на клиенте и сервере. Могу приложить, но суть такова: запрос на серваке идет на 443 порт, а если обращаюсь со своей машины, то там 80 порт. Причем автоматом. Не понимаю в чем разница. Вероятно на стороне сервиса. По-моему, это все хня, но на всякий случай пишу.
4. Вообще, все сотрудники работают на терминальном серваке. Он в одной сетке с сервером 1С. Это разные хосты. Я подключился к сетке Сервера 1С через VPN и подключился к базе с другого клиента. Тоже самое - не работает. Но создаю файловую копию базы на этом же клиенте, и вуаля - работает запрос в ФНС. Это все, в течении 30 минут, чтобы не было соблазна сказать, что мол сервис был недоступен.

Дословно, ошибку из журнала после отработки процедуры, можно посмотреть под катом
{ОбщийМодуль.ОбщегоНазначения.Модуль(5634)}: Ошибка при вызове конструктора (WSОпределения)
Возврат Новый(Тип("WSОпределения";), Параметры);
по причине:
Ошибка разбора XML: - [1,1]
Фатальная ошибка: 
Extra content at the end of the document
SystemId: https://npchk.nalog.ru:443/FNSNDSCAWS_2?xsd=1
45. AlexandrSmith 69 25.09.19 13:44 Сейчас в теме
Спасибо огромное автору статьи, за отличное освещение темы. Успешно создал на основании его рекомендации проверку в ФНС. Искренне благодарен. Прошу обратить внимание на особенности настройки портов антивирусов и файрволов. Очень обидно будет, если не заработает, так было у меня, но я успешно справился с этим. Желаю всем удачи.
Alex1053669; rpgshnik; +2 Ответить
46. rpgshnik 3753 25.09.19 14:03 Сейчас в теме
47. mikl79 119 26.09.19 14:51 Сейчас в теме
Спасибо за разработку, подскажите нет ли такой же для Управляемых форм?
49. rpgshnik 3753 27.09.19 03:37 Сейчас в теме
(47) Сама публикация это подробное описание как это сделать самостоятельно, да в качестве примера указана Комплексная автоматизация 1.1 и обычные формы, но в конце публикации привожу пример как данный модуль использовать и для управляемого интерфейса. Посмотрите "Посткриптум".
48. mikl79 119 26.09.19 15:20 Сейчас в теме
Я поторопился и ошибся, есть ли Бесплатное Заполнение (создание) контрагента по ИНН или Наименованию?
50. Elf77 10 15.11.19 10:00 Сейчас в теме
Спасибо за разработку.
rpgshnik; +1 Ответить
51. Elf77 10 15.11.19 12:45 Сейчас в теме
При загрузке cf-ника в пустую базу поругался на ошибочное значение во "вводе по строке" для справочника "Контрагенты".
Хотя это конечно поправимо..
52. d4rkmesa 27.07.20 10:08 Сейчас в теме
Неплохо, для себя примерно аналогичную доработку делал. Есть одна проблема с сервисом, при изменениях, навроде изменения КПП, для юрлица возвращается иногда(или даже довольно часто) статус "1 - Налогоплательщик зарегистрирован в ЕГРН, но не имел статус действующего в указанную дату", меняешь КПП - все хорошо. Поэтому на этот статус слишком завязываться не стоит, к примеру, если при размещении заказа проверяется статус контрагента.
rpgshnik; +1 Ответить
53. Delapukick 18.08.21 06:07 Сейчас в теме
Доброго времени суток! А не подскажите, были ли, у кого-то попытки запихать сие в обработку?) А разработка очень хорошая, большое спасибо.
rpgshnik; +1 Ответить
54. rpgshnik 3753 18.08.21 06:24 Сейчас в теме
(53) если вам просто точечно нужно проверить контрагента то возможно, выбрав необходимые участки кода.

Возможно конечно отказаться от РС и рассмотреть Дополнительные свойства, тогда вероятно и обработкой можно обойтись, если она будет подключена как регламентное задание.

Но я этого уже не проверял и для современных 1С данная публикация уже не так актуальна, т.к. имеются штатные средства проверки контрагентов.
55. maksa2005 542 18.08.21 12:44 Сейчас в теме
Решил скачать, но почитав комментарий - понял одно: Бесплатное и хорошие не может работать стабильно!
56. rpgshnik 3753 19.08.21 05:48 Сейчас в теме
57. AnddnA 117 12.10.21 00:46 Сейчас в теме
А у меня код:
 		WSОпределения = Новый WSОпределения("http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl", Неопределено, Неопределено, ,Неопределено);       
 		//WSОпределения = Новый WSОпределения("https://npchk.nalog.ru:443/FNSNDSCAWS_2?wsdl", Неопределено, Неопределено, ,Неопределено);       
		
		WSПрокси = Новый WSПрокси(
		WSОпределения, 
		"http://ws.unisoft", 
		"FNSNDSCAWS2", 
		"FNSNDSCAWS2_Port",
		Неопределено, 
		120, 
		Неопределено, 
		Неопределено, 
		Ложь
		);
Показать

выполняется только если у конфигурации ставить режим совместимости Версия 8.3.8 и выше, а иначе выдается ошибка:

Ошибка при вызове конструктора (WSОпределения)
{ВнешняяОбработка.ТестПроверкиКонтрагента.Форма.Форма.Форма(14)}: WSОпределения = Новый WSОпределения("http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl", Неопределено, Неопределено, ,Неопределено);
по причине:
Ошибка импорта схемы
по причине:
Ошибка доступа к файлу 'https://npchk.nalog.ru:443/FNSNDSCAWS_2?xsd=1'
по причине:
Ошибка работы с Интернет: Удаленный узел не прошел проверку
?
61. Elf77 10 29.10.21 13:12 Сейчас в теме
(57)https://forum.infostart.ru/forum67/topic271142/ - есть решение файл, который рекомендуют, помогает.
58. kab_krk 17.10.21 17:27 Сейчас в теме
(57) Есть еще способ решить проблему? У меня в УТ10.3 на 10500 контрагентов не работает, хотя разбиваю порции по 1000.

Ошибка работы с Интернет: Удаленный узел не прошел проверку

Ошибка при вызове конструктора (WSОпределения)
{ОбщийМодуль.ОбщегоНазначения.Модуль(3012)}:		Определения = Новый WSОпределения(ИмяФайлаWSDL);
{ОбщийМодуль.ОбщегоНазначенияПовтИсп.Модуль(553)}:	Возврат ОбщегоНазначения.WSОпределения(АдресWSDL, ИмяПользователя, Пароль);
{ОбщийМодуль.ОбщегоНазначения.Модуль(3055)}:	WSОпределения = ОбщегоНазначенияПовтИсп.WSОпределения(АдресWSDL, ИмяПользователя, Пароль);
{ОбщийМодуль.ОбщегоНазначенияПовтИсп.Модуль(564)}:	Возврат ОбщегоНазначения.ВнутренняяWSПрокси(АдресWSDL, URIПространстваИмен, ИмяСервиса, 
{ОбщийМодуль.ОбщегоНазначения.Модуль(1270)}:	Возврат ОбщегоНазначенияПовтИсп.WSПрокси(
{ВнешняяОбработка.ПроверкаКонтрагентов.МодульОбъекта(166)}:		WSПрокси = ОбщегоНазначения.WSПрокси(
{ВнешняяОбработка.ПроверкаКонтрагентов.МодульОбъекта(160)}:	Возврат ПолучитьWSПрокси() <> Неопределено;	
{ВнешняяОбработка.ПроверкаКонтрагентов.МодульОбъекта(70)}:	ЕстьДоступКВебСервисуФНС = ЕстьДоступКВебСервисуФНС();
{ВнешняяОбработка.ПроверкаКонтрагентов.МодульОбъекта(18)}:	ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагента,ДанныеПолучены);
{ВнешняяОбработка.ПроверкаКонтрагентов.Форма.Форма.Форма(4)}:	ПроверкаКонтрагентов();
по причине:
Ошибка импорта схемы 
по причине:
Ошибка доступа к файлу 'https://npchk.nalog.ru:443/FNSNDSCAWS_2?xsd=1'
по причине:
Ошибка работы с Интернет:  Удаленный узел не прошел проверку
Показать
59. fml_nhk 21.10.21 13:56 Сейчас в теме
И у меня начало ругаться на "WSОпределения = Новый(Тип("WSОпределения"), Параметры) Удаленный узел не прошел проверку", после обновления УПП. И гугл не помогает, только ваш свежий комментарий по данной проблеме попался. Вам удалось разобраться?
60. Elf77 10 29.10.21 13:12 Сейчас в теме
(59) https://forum.infostart.ru/forum67/topic271142/ - есть решение файл, который рекомендуют, помогает.
62. Elf77 10 29.10.21 13:14 Сейчас в теме
(58)https://forum.infostart.ru/forum67/topic271142/ - есть решение. файл, который рекомендуют, помогает.
rpgshnik; +1 Ответить
64. user1743714 21.07.23 06:37 Сейчас в теме
Добрый день. Кто-то еще пользуется сервисом ФНС? У вас работает?
65. wildhog 469 16.08.23 11:43 Сейчас в теме
(64) Работает. Но сервис переехал. Вместо http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl теперь https://npchk.nalog.ru:443/FNSNDSCAWS_2?wsdl
Вот тут нашел эту информацию.
https://infostart.ru/1c/tools/439808/
Sherdrada; rpgshnik; +2 Ответить
66. Sherdrada 29.09.23 15:40 Сейчас в теме
(65) Здравствуйте. Платформа 8.1 не поддерживает работу с защищенным соединением. Это вообще возможно реализовать на 8.1,например через winHTTP и как тогда правильно составить запрос? Или что можно почитать на эту тему, чтобы разобраться самостоятельно?
67. wildhog 469 05.10.23 10:51 Сейчас в теме
(66) Честно говоря не в курсе как на 8.1 запустить https...
Оставьте свое сообщение