<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
упомянутый сервис на данный момент тестовый режим имеет.
отчаянно врет и дает недостоверные данные.
будьте бдительны
(2) ZOMI, Сделал и хорошо) Больше — это не меньше)
Есть у этого сервиса такой баг, если передать дату проверки, то некоторые контрагенты выкидывается как недействующий, хотя он действующий, поэтому в своей сделал возможность передавать без даты. Написал на сервис, ребята воспроизвели ситуацию и больше 3-х недель ни слуху, ни духу. 🙂 Госконтора одним словом.
Спасибо за комментарии.
Код обработки очень простой. В ближайшее время планирую расширить описание чтобы её можно было использовать не столько для проверки контрагентов, сколько как пример по работе с web-service из среды 1С. Возможно, кому-то кто ранее не сталкивался с подобной задачей будет полезно.
>>При передаче на проверку нескольких контрагентов, если хоть одна запись содержит ошибку (ИНН или КПП не соответствуют шаблону), будет возвращена ошибка
Передавать по 1-му контрагенту может быть?
(6) Franco, Можно передавать по одному. Но сам сервис поддерживает возможность передачи до 10 тыс. контрагентов одновременно.
Строку WSКонтрагент.INN = ДанныеКонтрагента.ИНН;
лучше добавить СокрЛП(), иначе Исключение при наличии пробелов в ИНН.
по ИП пишет «неправильный КПП»
(2) ZOMI, что бессонница мучает когда проблему за которую ты пытаешься драть 2000р. другие решают за 60р. (кажется такой курс одной старт мани)?
(5) СПАСИБО! 🙂
(10) YanTsys,
Моё платное решение за которое я «деру» целую стоимость часа работы программиста расчитано на конечных пользователей с включенной оперативной поддержкой, а не поделка для недозагруженных работой программистов, тешащих свое эго за счет своего работодателя.
Кроме того, если говорить о самой задаче — то правильное решение — это проверка на дату документа с отработкой случаев ручного указания КПП в счет-фактурах, а не только из карточки контрагента. Также актуально проверять и организации.
(11) ZOMI,
Всяк сверчок хвалит свой шесток…
Как правило самые лучшие зарплаты предлагают в тех местах где «оперативная поддержка» в какой-то момент переоценивает свои возможности и в период отчетности динамит часть своих клиентов. Вы не представляете что такое для организации оказаться вообще без поддержки в последние дни сдачи отчетности 🙂
(11) ZOMI,
правильное решение это как минимум проверка документа при его проведении что уже реализовано штатными средствами в 8.3 🙂
Выходит ошибка в обработке, при запросе. Что это означает?
ИФНС поменял версию сервиса. Изменилось и имя сервиса и формат обращения к нему.
Поэтому обработка и выдавала ошибку.
Сделал версию обработки для новой версии сервисаhttp://npchk.nalog.ru/FNSNDSCAWS_2?wsdl
Привет, а обработка Проверка контрагентов через сервис ФНС сейчас актуальна?работает?
нужна для УПП 1.3
(16) Да, все работает. Только что проверил. УПП под рукой нет, но есть УТ 10.3 Сделал версию для неё, но она должна работать и в УПП. Для массового заполнения таблицы Контрагенты используются обороты регистра ВзаиморасчетыСКонтрагентами в выбранном периоде.
Вообще обработка должна работать в любой конфигурации для которой определен справочник Контрагенты с реквизитами ИНН и КПП.
ок, спасибо
День добрый обработка версии 2 выдает ошибку. Использую на БП 2.0.66.64
(19) Только что проверил на Бухгалтерия предприятия, редакция 2.0 (2.0.66.64)
Все работает.
Судя по тексту ошибки была проблема с сервисом ФНС. Возможно был сбой в его работе, а сейчас уже все восстановили.
Попробуйте еще раз.
Да вы правы, все работает.
Спасибо, большое