Заполнение контрагентов по ИНН для БП2.0 и УТ11.1




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

45 Comments

  1. miv

    Еще бы для 1С Документооборот сделали…

    Reply
  2. agroeco

    В ДО 2.0 будет …

    Reply
  3. Записьдампа

    (2) agroeco, Не пробовал, структура схожая может и заработает.Попробуй если релиз последний то должен быть регистр сведений «ПараметрыИнтернетПоддержкиПользователей» если нет прописать логин и пас аналогично в коде, аналогично как описано по УТ. Если не получится то, возможно механизм обработки результата загрузки из ЕГРЮЛА придется адаптировать.

    Reply
  4. desarz

    Юр. адрес для БП 2.0 переносит не корректно, не заполняет по кладр.

    Reply
  5. samat9393

    а для УТ 10.3 пойдет или у него есть отдельная ?

    Reply
  6. belmaxim

    Адрес загружается не в формате КЛАДР, в остальном работает.

    Reply
  7. Гость

    (3)

    Открываю БП2 Перезаполнение и выдают вот это.

    {ВнешняяОбработка.ЗагрузитьРеквизитыКонтрагентаПоИНН.МодульОбъекта(22,4)}: Процедура или функция с указанным именем не определена (ПоказатьПредупреждение)

    <<?>>ПоказатьПредупреждение(, НСтр(«ru=’Реквизиты обособленных подразделений заполняются вручную.'»));

    {ВнешняяОбработка.ЗагрузитьРеквизитыКонтрагентаПоИНН.МодульОбъекта(25,4)}: Процедура или функция с указанным именем не определена (ПоказатьПредупреждение)

    <<?>>ПоказатьПредупреждение(, НСтр(«ru=’Поле «»ИНН»» не заполнено'»));

    Reply
  8. AlexO

    (0)

    Заполнение контрагентов по ИНН для БП 2.0

    Вырезано из БП3?

    Еще бы для 1С Документооборот сделали…

    Еще проще из БП3 перенести.

    Reply
  9. Гость

    (3)

    Короче не знаю что к чему, вообще не разбираюсь в этих темах, никогда в конфигуратор не заходил. В общем заскочил туда щас и в этом, скажем так коде, удалил вот это :

    {ВнешняяОбработка.ЗагрузитьРеквизитыКонтрагентаПоИНН.МодульОбъекта(22,4)}: Процедура или функция с указанным именем не определена (ПоказатьПредупреждение)

    <<?>>ПоказатьПредупреждение(, НСтр(«ru=’Реквизиты обособленных подразделений заполняются вручную.'»));

    {ВнешняяОбработка.ЗагрузитьРеквизитыКонтрагентаПоИНН.МодульОбъекта(25,4)}: Процедура или функция с указанным именем не определена (ПоказатьПредупреждение)

    <<?>>ПоказатьПредупреждение(, НСтр(«ru=’Поле «»ИНН»» не заполнено'»));

    Сохранил и при открытии все норм и вроде он все заполнил, я даже не сделал резервную копию базы))) Будем уповать на Бога что все норм сделал)))))

    Страшно то как)

    Reply
  10. AlexO

    (9) Ragnar,

    ЗагрузитьРеквизитыКонтрагентаПоИНН

    Т.е. что у вас ключевая функция не отработала — вас не смущает?

    Reply
  11. Записьдампа

    (9) Ragnar, Добрый день. Какой релиз конфигурации?

    Reply
  12. Записьдампа

    (8) AlexO, Да сделано на базе БП 3.0

    Reply
  13. Гость

    (10) AlexO,

    не знаю что там заработало или нет, но в результате наименование контрагентов и их адреса он подправил))

    Reply
  14. Гость

    (11)

    Reply
  15. Гость

    (11)

    1С Бухгалтерия 2.0, нормер Релиза не помню щас, не на работе щас, но знаю что последний релиз, обновлял пару дней назад.

    Reply
  16. Гость

    (12)

    Бухгалтерия предприятия, редакция 2.0 (2.0.64.27)

    Вот.

    Reply
  17. Записьдампа

    (16) Ragnar, (16) Ragnar, ок спс, гляну, что за ошибка на этом релизе.

    Reply
  18. Гость

    (17)

    Бро, отпишись потом если исправишь) снова скачаю.

    Reply
  19. Гость

    (17) Есть какие нибудь новости на счет этой ошибки?

    Reply
  20. doronin70

    ЗагрузитьПоИНН_БП20.epf — сырая обработка. На последнем релизе БП 2.0.64.41 — несколько ошибок.

    — Во-первых ПоказатьПредупреждение(, НСтр(«ru=’Поле «»ИНН»» не заполнено'»)) — нет такой процедуры в БП 2, пришлось заменить на стандартное предупреждение.

    — Во-вторых, при попытке заполнить индивидуального предпринимателя — не находит перечисление «ПолФизическихЛиц» и выкидывает ошибку.

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

    Все пришлось допиливать вручную.

    Reply
  21. Записьдампа

    (20) doronin70,Ну конечно, писалась 15.03.2015, конечно там был старый релиз. Думаю адаптировать под новый релиз дело 10 мин.

    А самое главное уметь время отвечать на комментарии 🙂

    Reply
  22. zels

    Добавил обработку во внешние печатные формы (правда, к справочнику Контрагенты она не привязывается). Непонятно, как ей пользоваться .

    Reply
  23. Записьдампа

    (22) zels, прочитайте внимательно описание, если правильно все прикрепили должна появиться кнопка заполнить сверху в форме элемента в спр контрагенты, это для УТ11, для БП 2.0 прикрепляется как внешняя печатная форма — печать — заполнить по ИНН.

    Reply
  24. zels

    1. Оказывается, прикрепление через добавление строки не работает. Только через подбор.

    2. При печати по ИНН требует, чтобы сначала записали, а записывать без имени не хочет.

    3. Адреса не заполняет.

    Reply
  25. maksa2005

    ИНН 8911019956:

    {Форма.Форма.Форма(588)}: Ошибка при вызове метода контекста (getCorporationRequisitesByINN)

    Ответ = Прокси.getCorporationRequisitesByINN(ВходныеПараметры);

    по причине:

    Ошибка вызова операции сервиса: {http://ws.orgregister.company1c.com/}:RequisitesWebServiceEndpointImplService:getCorporationRequisitesByINN()

    по причине:

    Неверный формат.

    Управление торговлей, редакция 11.1 (11.1.10.145) (http://v8.1c.ru/trade/)

    Copyright © ООО «1C», 2003-2015. Все права защищены

    (http://www.1c.ru)

    Reply
  26. elka302

    Для какой платформы обработки? 8.2? 8.3?

    Reply
  27. Alik_1c

    Прошу вернуть 1 стартмани, ваша обработка не рабочая.!!!!

    Reply
  28. Записьдампа

    (27) Она не может работать на всех релизах и на всех версиях БСП! Возможно вы не все сделали по инструкции!

    Reply
  29. Alik_1c

    (28)Ой даже и не знаю. Логин и пароль прописал во внешние печ. формы добавил. . Релиз БП последний и платформа 8,3,9. что еще надо было настроить?

    Reply
  30. winipuhtwo

    Скачал заполнение для БП 2.0, не работает.

    503 — Service Unavailable. Please, use new web service https://api.orgregister.1c.ru/orgregister/v7?wsdl See details at https://portal.1c.ru/download/public/instruction/OLD_Data_1C-Contragent.pdf

    Reply
  31. gosizo

    таже фигня что и в (30)

    Reply
  32. kvikster

    у меня работает все сделал по интрукции

    Reply
  33. igorek_zh

    Бухгалтерия предприятия, редакция 2.0 (2.0.66.38)

    При создании описания сервиса произошла ошибка. URL сервиса: https://api.orgregister.1c.ru/orgregister/v2?wsdl

    Код ответа сервера: 500

    Reply
  34. igorek_zh

    ЗагрузитьПоИНН_БП20.epf — не работает

    Reply
  35. katochimoto

    Не работает

    Ошибка при получении файла с сервера api.orgregister.1c.ru:

    {ОбщийМодуль.ПолучениеФайловИзИнтернетаКлиентСервер.Модуль(359)}: Ошибка при вызове метода контекста (Получить)

    Соединение.Получить(ПутьКФайлуНаСервере, ПутьДляСохранения);

    по причине:

    Ошибка при выполнении файловой операции ‘orgregister/v1?wsdl’

    по причине:

    Ошибка работы с Интернет: внутренняя ошибка сервера (500). <soap:Envelope xmlns:soap=»http://schemas.xmlsoap.org/soap/envelope/»>

    <soap:Body>

    <soap:Fault>

    <faultcode>soap:Server</faultcode>

    <faultstring><![CDATA[503 — Service Unavailable. Please, use new web service https://api.orgregister.1c.ru/orgregister/v7?wsdl See details at https://portal.1c.ru/download/public/instruction/OLD_Data_1C-Contragent.pdf]]></faultstring>

    </soap:Fault>

    </soap:Body>

    </soap:Envelope>

    по причине:

    Ошибка работы с Интернет: внутренняя ошибка сервера (500)

    Сервис сменился судя оп ответу сервера.

    Reply
  36. gizik

    Бухгалтерия предприятия, редакция 2.0 (2.0.66.39) — добавил и как внешнюю обработку, и как печатную форму… не работает!!((( зря потрачен стартмани ((((

    Reply
  37. Записьдампа

    Новая версия обработки пока в разработке.

    Reply
  38. katochimoto

    (37) Когда планируется завершение доработки?

    Reply
  39. kosmotello

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

    Reply
  40. katochimoto

    (39)насколько я в курсе не возбраняется подобное, но можно и в личку отправить, буду благодарен, т.к. автор не спешит исправить.

    Reply
  41. Записьдампа

    Добрый день, если есть желание то можете поправить. Я переделываю обработки на расширение на БСП.

    Reply
  42. kosmotello

    Мне на БП2.0 помогло следущее —

    В модуле объекта обработки ищешь три значения:

    «RequisitesWebServiceEndpointImpl2Service»

    «RequisitesWebServiceEndpointImpl2Port»

    «https://api.orgregister.1c.ru/orgregister/v2?wsdl»


    Меняешь в них цифру 2 на 7 и все. Сохраняешь, перерегестрируешь обработку и должно взлететь.

    У меня взлетело после перезагрузки базы.

    Reply
  43. Stivens

    БП 2.0.66.46. После правки 2 на 7, отключение пола физ.лица и ОГРНИП стала заполнять наименование, и Юридический адрес… Маловато будет

    А остальное в БП 20 в Контрагентах и писать нечего…

    Reply
  44. saveliev

    Прошу вернуть 2 стартмани, ваши обработки не рабочии.!!!!

    Reply
  45. Xalmg

    Здравствуйте, у меня перестала работать ваша обработка Бухгалтерия предприятия, редакция 2.0 (2.0.66.84) (http://v8.1c.ru/buhv8/)

    Copyright (С) ООО «1C-Софт», 2009 — 2019. Все права защищены

    (http://www.1c.ru). Как ее исправить?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *