<?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='\
8.3.12? она же пока в исполнении «только для тестирования» …. или я ошибаюсь?
(1) Это да. Но у меня она на боевом сервере стоит. И sql-ные базы с ней прекрасно работают.
Если кто-то проверит обработку на более низких версиях платформы, пишите в комментариях — не стесняйтесь.
Интересный сервис. А где описание API налоговой найти ?
(3) Его не существует. Нашёл на одном форуме информацию, что можно через «Инструменты разработчика» в браузере проанализировать, что передаётся в POST-запросе, как посмотреть ответ и т.п. Дальше — свободное творчество.
Проверку ФМС позаимствовал в конфигурации «1С:Управление МФО и КПК». К API этого сервиса, вероятно, есть какая-то документация.
а я всегда пишу подключаемые обработки чтобы их можно было запустить через файл-открыть и при этом не было пустой формы 🙂
тем более что это совсем несложно сделать. Ссылку на физика на форму и пару кнопок.
Теперь по существу:
ERP 2.4.2, 8.3.10.
— если без заполненных данных о паспорте нажать «Получить ИНН» то вылетит ошибка «Преобразование значения к типу Число не может быть выполнено» в Форма(167) потому что тогда Серия=null, и вместо СтруктураДанныхФЛ.Серия + » » + СтруктураДанныхФЛ.Номер лучше было бы написать «» + СтруктураДанныхФЛ.Серия + » » + СтруктураДанныхФЛ.Номер.
— при ошибке соединения с service.nalog.ru (Форма(208)) лучше было бы не использовать Попытку-Исключение без какого-то сообщения пользователю о причинах этой ошибки. Пока я не вывел там Сообщить(ОписаниеОшибки()) я не узнал что, например, дата рождения это обязательный реквизит для обращения.
— ну и как-то сигнализировать пользователю о результате заполнения. Потому что сейчас неясно, то ли ИНН получен такой же как и был указан, то ли не получен совсем. И в том и в том случае визуальный результат одинаков.
— если ФМС на запрос о проверке паспорта возвращает ответ «Не действителен (ЗАМЕНЕН НА НОВЫЙ)» то это интерпретируется в сообщение «Указаны некорректные паспортные данные». Не знаю насколько смысл этих фраз аналогичен, но лучше было бы возвратить ровно тот же ответ что и ФМС.
— отличие «(:» от «:)» это что, проверка на внимательность? Или чтоб не расстраивать владельцев недействительных паспортов, выдавая им ответ «успешно»?
А в общем — вроде работает, спасибо. 🙂
(6) Александр, благодарю за обратную связь!
Обязательно учту ваши замечания и постараюсь на выходных выложить улучшенную версию, прикрутив красивые бантики к обработке.
(1) Ща требование от Инфостарта такое, обязательно писать на чем конкретно тестилось, вот автор, да как и я, написал, то что у него сейчас под рукой установлено.
Опубликовал обновленную версию обработки.
В исправленной версии учтены все замечания Александра Полетаева. Спасибо ему ещё раз!
В том числе уточнен метод оповещения о недействительном паспорте.
Теперь, если паспорт «Не действителен», пользователю выдаётся предупреждение в виде форматированной красной строки типа
«Не действителен (ЗАМЕНЕН НА НОВЫЙ)», «Не действителен (ИЗЪЯТ, УНИЧТОЖЕН)» ,»Не действителен (ЧИСЛИТСЯ В РОЗЫСКЕ)» и т.п.
В предыдущей версии ответ сервера зачастую интерпретировался некорректно, выдавая сообщение об успешной проверке.
Как писал ранее, эта часть проверки была позаимствована в конфигурации «1С:Управление МФО и КПК». И до сегодняшнего дня детально проверить её не было возможности.
Добавил версию для УТ 11. Протестировал на релизе 11.4.3.126.
Основной файл при запуске обработки выдавал ошибку в этой конфигурации. Решил внести изменения, учитывающие особенности УТ, и выложить в виде отдельного файла.
эх, что же код то не написали, было бы интересней смотреть
Правильно я понимаю что проверка производится только после ввода капчи
(13)
Да, всё верно. Эти онлайн сервисы требуют капчу как защиту от массовых запросов, чтобы их сервера не упали. И работоспособность предложенных инструментов, естественно, зависит от работоспособности официальных сервисов МВД/ФНС.
у меня не работает . на каждый паспорт выдает, что недействителен, а инн вообще не грузит
(15)
Тоже не работает. Не может соединится с сервером для получения ИНН.
Здравствуйте! проверяю на бухгалтерии 3.0 (разные базы, разные релизы) проблема одна и та же — вылетает на секунду окно с капчей, сразу закрывается и ничего не происходит
(16)
(17)
Подтверждаю. Получение ИНН перестало работать.
Пока разбираюсь, с чем это связано: с изменения в новых релизах платформы или же с изменениями на портале ФНС. А может, с тем и другим.
Как будет результат, дам знать и, вероятно, опубликую новую версию обработки.
(18) Здравствуйте! Не готова ли еще исправленная версия? Можно ли как-то с Вами связаться по почте?
Получение ИНН не работает, потому что неверно извлекается токен капчи в методе ПолучитьКартинкуКапчиФНС модуля объекта обработки.
Должно быть:
Было:
(20) Благодарю за подсказку. На портале ФНС, действительно, изменился формат поля с капчей. Это было основной причиной, по которой обработка перестала работать в части получения ИНН по паспорту.
(19) Добрый день! Исправленную версию (1.2) выложил. Если вы ранее скачивали обработку, а теперь не можете получить новую версию без оплаты, можете написать мне в личку — я вышлю.
Версию для УТ также постараюсь обновить на днях.
(0)
(23) Здравствуйте еще раз! Скачал новую версию обработки, но проблема все равно осталась — появляется на долю секунды окно с капчей и сразу пропадает. Что в ЗУПе, что в БП. релизы: ЗУП 3.1.5.353, БП 3.0.61.47. Проблема одинаковая на обоих командах — Получить ИНН с портала ФНС и проверить действительность паспорта. Отчего это может быть?
(24) Окно с капчей — это просто форма. Она открывается и пока вы её не закроете, она будет висеть открытой. Что её может закрыть, если не вы, можно попытаться понять, только сделав трассировку в отладчике. Я на типовых конфигурациях как в файловом, так и в серверном режиме, не наблюдал подобного поведения своей обработки.
(25) Здравствуйте! проверяю на 2х разных базах (типовых) на 2х разных компьютерах ЗУП 3.1.8.216 одна рабочая, другая просто демо база — из формы физ лица все работает, а из формы списка ведет как я писал выше — открывается на секунду окно с капчей и исчезает. Может ли это быть связано с какими-то настройками эксплорера например? и второй вопрос — ваша обработка предназначена для проверки только одного физ лица за 1 раз, или можно проверить сразу 10 человек?
(26) Текущая версия обработки не заточена под использование её в форме списка. В частности, сейчас получение ИНН предполагает помещение полученного значения в соответствующее поле на форме элемента справочника без принудительной записи. Проверка нескольких человек за раз в HTTP-сервисах, которые использует обработка, не предусмотрена, насколько мне известно, поэтому и обработка этого не умеет. Насчёт работы из формы списка подумаю на досуге.
Обновил обработку для УТ 11 до версии 1.2.
На сайте ИФНС добавили согласие на обработку персональных данных перед запросом ИНН. Обработка перестала работать.
(29) Благодарю за информацию.
Нет худа без добра: согласие на обработку ПД добавили, а капчу, похоже, убрали))
Как будет время, подумаю варианты обхода, чтобы реанимировать обработку.
Как и обещал ранее, наконец-то, нашёл время и починил обработку. Жду новых отзывов и предложений.
Доброго времени суток, подскажите а для конфигурации: УПП, 1.3 данная обработка работает?
или в ней надо подкорректировать код для нормального функционирования
(33) Данная обработка заточена под управляемые формы. На УПП работать не будет. Для этого надо переписывать её на обычные формы.
(33) Часть функционала УПП использует УФ в толстом клиенте, можно попробовать встроить обработку в конфигурацию и запустить, авось прокатить 😉