<?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='\
О, за наводку про сервис 1С спасибо, а остальное можно было получать от DaData.
Еще не побывал, но за идею однозначно плюс!
однозначный плюс +
А что за сервис? Ради интереса пытался найти себя, и ни чего не дал полезного.
Спасибо, друзья.
На счет сервиса dadata.ru — не соглашусь с тем что он равнозначен этому.
фиас онлайн »
Например в dadate в ответе по адресу я получаю адрес в формате кладр,
а сегодняшнее требование к заполнению счетов-фактур вызвало коллективное помешательство
бухгалтеров и они поголовно хотят видеть адреса в формате ФИАС. Здесь же прилетает именно
адрес в формате ФИАС, да еще и с ГУИД ссылкой в значении, по которой можно получить и ссылку из Кладра:
Структ.address.fiasOnlineLink например «
также в сервисе легко увидеть закрытые организации и причину закрытия:
Структ.closeInfo.closeReason.name например «ПРЕКРАЩЕНИЕ ДЕЯТЕЛЬНОСТИ ЮРИДИЧЕСКОГО ЛИЦА В СВЯЗИ С ИСКЛЮЧЕНИЕМ ИЗ ЕГРЮЛ НА ОСНОВАНИИ П.2 СТ.21.1 ФЕДЕРАЛЬНОГО ЗАКОНА ОТ 08.08.2001 №129-ФЗ»
Из значения Структ.description можно получить исчерпывающую информацию по организации и контролить таким образом контров перед заключением договоров
И все это бесплатно!!! (надолго, надеюсь)))
А на счет того что себя не смогли найти… И слава богу))) это поиск по организациям, директорам и учредителям
(4)1С:Контрагент
Быстрая проверка информации о контрагентах, автоматическое заполнение реквизитов контрагентов в различных документах и другие полезные функции
Большое спасибо! то что нужно и в рабочем состоянии (в отличие от других подобных публикаций)
Для поиска физлица по ИНН
(5)да, соглашусь, тут больше всего приходит.
Написал на 100 строк утилиту, буду крутить ее к базе =) Спасибо за ссылку.
Можем кому, будет интересно, как работает ( на ОФ, платформа 3.8)
(5)
вряд ли бесплатно будет в будущем — как только наберут вес сразу монетизируют )
ИП не находит(
(12) А это вот как раз то как (8) написал. Это как раз поиск по ИП, учредителям, директорам и сотрудникам.
тут
Вот подробнее
Получаем структуру Структ. Такой конструкции — Структ.closeInfo.closeReason.name — в Структ нет. Судя по описанию она есть в Структ.predecessor. predecessor — это массив. При запросе информации, кол-во элементов в массиве predecessor равно 0. Подскажите, как правильно получить состояние Контрагента?
(14) Точно есть, пример реальный привел. Есть но не всегда. Только когда организация закрыта. Поэтому проверяем не закрыта ли организация либо через
либо через
Если кому интересно как получить тоже самое из сервиса 1С — вот продолжение кода из публикации:
Показать
(16)Спасибо, получилось!
(6) Я имел ввиду сервис, который предлагается использовать в публикации. огрн.онлайн
Он мне не правильную информацию выдал обо мне. Вернее не актуальную
По вам походу уже обработки пилятhttps://infostart.ru/public/695635/ )))
(19) Ну, по-хорошему, это и делалось для того чтобы все пилили обработки. )))
Автор ее к рознице прикрутил. Еще можно ее к бухгалтерии 2.0 прикрутить — там тоже нет такого сервиса, УТ 10.2, 10.3.
Ну а в 77 вообще поле не паханное, так что… ))))
В любом случае, спасибо за бдительность!
(11) Видимо в этот сервис данные подсасываются из того же 1С Контрагент.
Хороший вариант. Жаль не подходит для пользователей совсем уж старых решений на 8.1. (
(22) Ну конкретно этот код не работает — там просто нет таких методов.
Для пользователей 8.1 и 7.7, можно порекомендовать использовать COM объект WinHttp.WinHttpRequest.5.1
Пример для 8.1 будет такой
Показать
А дальше парсить, парсить… ))) Поищите в сети «парсер JSON». Он точно есть уже готовый.
присоединяюсь к благодарностям. Еще не смотрел, судя по обсуждениям +
(23) Это в v7.7 не работает.
Пробовал по всякому.
Подскажите куда копать, что посмотреть.
я с запросами на Вы
Полезная инфа, благодарю.
https://egrul.nalog.ru/ никаких ссылок нет.
Настораживает только то, что база ОГРН.ОНЛАЙН содержит ошибки — меня, например, приписала к чужой ИФНС, на которую в выписке с
Видимо исправят, со временем…
(25) Не было 77 под рукой (я уже забыл как там писать-то )))). Сейчас проверил — 404 Bad request… Зато без проблем сработал 1с-ный сервис. Пример вэтой статье При том, что он тоже https..
(5)
Дадата приводит адреса именно к ФИАС. Почему вы думаете, что там адреса в формате КЛАДРа?
А ещё проставляются индексы, районы города и координаты ツ
Очень помогло. СПС
(29) Ну вот пример с ихофициального сайта
Показать
Это формат ФИАС?
(31) Это пример исправленного адреса, так как в ЕГРЮЛ полно ошибок. Адрес «как в ЕГРЮЛ» возвращается в поле address.data.source либо address.value, если address.data пустое.
бухгалтеров и они поголовно хотят видеть адреса в формате ФИАС. Здесь же прилетает именно
адрес в формате ФИАС, да еще и с ГУИД ссылкой в значении, по которой можно получить и ссылку из Кладра.
Вот здесь подробности по этому поводу:https://dadata.userecho.com/forums/4-baza-znanij/topics/3369-adres-kompanii-v-tochnosti-kak-v-egryul/
(32) Спасибо за разъяснения. Уверен, что для тех, кто выбирает себе интеграцию, это будет полезная информация!
Во-первых, еще раз спасибо за публикацию!
Во-вторых, вопрос: взяв за идею вашу публикацию сделал на тестовой базе реализацию добавления/актуализацию данных в справочнике юр. лиц. Поигрался и на какое-то время отложил. Вчера попробовал снова, получил:
Почитал про api, там нужно получать ключ api. Посмотрел заявку на получения ключа — ссылка на сайт с продуктом, описание, скриншоты и т.д. Для тиражных продуктов — ок. Что делать с не тиражными решениями? Там сайта, описания и т.п. нет. Думаю написать разработчикам с этим вопросом, но вдруг кто-то из 1сников уже обращался и имел опыт получения ключа API?
Да, сервис по прежнему бесплатен, но уже не бесконтролен, как это было до начала этого года. Это касается не только данного сервиса, например яндекс с нового года тоже отключил все тестовые ключи, пришлось заново регистрировать личный кабинет для корректной работы некоторых локальных решений 1С для логистики. Там мы предоставили сайт компании, на которой нет никакой карты но получили ключ. По сути , это защита от роботов, а не от реализации 2-х, 10-ти запросов в день.
(35) Спасибо за ответ! Вот кстати, что пишут разработчики в своей группе в ВК:
В связи с большим наплывом заявок на API имеет смысл прояснить критерий отбора. Ключи получают те продукты, которые предоставляют сервисы широкому кругу пользователей: боты для месседжеров, плагины для 1С, CRM и прочих. Т.е. способствующие распространению открытых данных.
Продукты, которые используются для личного или внутрикорпоративного пользования, получают отказы. Таким продуктам будет позже предложен вариант с платным API на выделенном сервере.
т.е. для нас с Вами ситуация двоякая. С одной стороны, они говорят, что 1с — это гуд. С другой, все продукты для внутрикорпоративного использования — это плохо. Учитывая специфику 1с, одно противоречит другому. Простой пример: Я сделал некую тестовую конфигурацию с использованием сервиса. Она получилось (предположим) удачной, я получил на нее ключ, конфу начали качать и встраивать в свои конфы (она для этого и создавалась) и получаются, что если один из тех, кто воспользовался конфигурацией, нарушил правила API ключ забанят у всех. Так получается?
p/s Задал эти вопросы разработчикам. Посмотрим, что скажут.
(36) Совершенно верно. Бесплатный сервис и делается для того чтобы им пользовались все. Однако, встраивая этот и подобный ему сервисы в некую конфигурацию, сам ключ лучше сделать константой, которую пользователь будет вносить в момент начала эксплуатации. И если он вдруг нарушит правила пользования, это коснется только его. По идее разработчики совсем не против использования их сервиса в 1С.
(37) Вариант с константой — это первое, что пришло на ум. Но тут:
1. Чтобы получить ключ API на обработку или конфигурацию надо прислать разработчикам ссылку на продукт. Пусть даже на публикацию на инфостарте. Но публиковать по-факту неработающие и не оттестированные разработки тут (да и где угодно) нельзя. А чтобы протестировать и опубликовать нужен ключ API. Замкнутый круг. Ну это ладно, тут я думаю можно как-то договориться.
2. Сделали подключаемый ключ т.е. каждый вводит для себя. Скачал условный Иван Иванович обработку «Заполнение контрагентов в БП 3.0 с ОГРН.онлайн», она (обработка) просит ввести ключ API. А чтобы получить ключ API нужно прислать ссылку на приложение с его описанием и т.д. Всем одну и туже ссылку на публикацию на ИС присылать?
Как я понимаю логику разработчиков — одно приложение, один ключ. Но как это будет работать применимо к 1с, не очень понятно. Да и на других платформах тоже. Возможно, компрометироваться в случаи нарушения будет не ключ, а IP или еще что-то.
Вот примерпубликации которая, судя по самому сайту, получила одобрение . Т.е. автор, создал СВОЙ сервис, использующий ИХ сервис.
Скачал несколько обработок, разобрал данный пример везде в качестве ответа получаю ответ «По указанным параметрам не найдено ни одной компании». Так сервис работает без ключа или нет?
(41) Нет, без ключа с нового года API увы не работает. Хотя, какое то странное сообщение получаете. Ответ должен быть в формате JSON
error: «Access is denied»
(42) На строке
я получаю пустую строку, а далее ошибка чтения/преобразования значения JSON.
В общем, фейл 🙁
Бесплатно не работает: «Access is denied» . Будет честно об этом написать в самом начале.
(44) Да, к сожалению это так. Отредактировал.
За вообщем-то небольшие деньги (2 коп за запрос, мин. 10000 запросов = 200 руб) можно получить ключ доступа к API. А куда его нужно вставить в приведенном коде.
В случае одобрения вашей заявки вам будет предоставлен ключ доступа. Данный ключ доступа необходимо указывать в заголовке X-ACCESS-KEY при каждом запросе к API.
Показать
Как то так…
(47) Спасибо !
Но теперь, вероятно, нужно как-то и кодировку установить.
Это тоже в заголовке делается ?
Все верно, к примеру:
Для 7.7 если будет готовый, дайте знать, пож