Загрузка Классификатора банков из файла bnk.zip, скачанного с сайта РБК




Принцип обмена данными из 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='\

50 Comments

  1. sohoware

    Будет ли работать с УНФ (Управление нашей фирмой, редакция 1.6) ?

    Reply
  2. ah7777777

    не пробовал. думаю если это конфигурация под УФ и использует БСП то да. Посмотрите на константы, есть ли там ИспользоватьАльтернативныйСерверДляЗагрузкиКлассификатораБан­ков

    если да то будет

    Reply
  3. kzotiks

    Так понимаю 1С всё ещё сосет инфу от холдинга с головой на Кипре.

    Reply
  4. mikl79

    Спасибо, пригодилось, только пришлось переписать, т.к. в версии 3.0.52.42 уже загрузка идет с сайта 1С, а не с сайта РБК.

    Так же поменяли название справочника с КлассификаторБанковРФ на КлассификаторБанков и константу так же.

    Будет время выложу.

    Reply
  5. ah7777777

    Понял! Не заглядывал туда уже давно. Как я понял, теперь классификатор обновить можно только с ИТС или сайта 1с? А через rbk.zip не возможно?

    Reply
  6. ah7777777

    Разобрался. Выложил новую обработку для БП старше (3.0.52.36)

    Reply
  7. arcadics

    Требуется доработать загрузку файла с машины клиента.

    Reply
  8. ah7777777

    (7) А что надо переделать? Там тонкий клиент? под тонким все работает.

    Reply
  9. arcadics

    Сервер не будет видеть путь к файлу который лежит на машине клиента. Только если вы запускаете тонкий клиент на сервере.

    Reply
  10. arcadics

    (8) Например так:

    &НаКлиенте
    Процедура Загрузить(Команда)
    ДвоичныеДанные = Новый ДвоичныеДанные(Путь);
    Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
    Загр(Адрес);
    КонецПроцедуры
    
    &НаСервере
    Процедура Загр(Адрес)
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
    ПутьКФайлу = ПолучитьИмяВременногоФайла(«zip»);
    ДвоичныеДанные.Записать(ПутьКФайлу);
    Обработки.ЗагрузкаКлассификатораБанков.ЗагрузитьДанныеИзФайла(ПутьКФайлу);
    КонецПроцедуры

    Показать

    Reply
  11. ah7777777

    ок! я сегодня постараюсь переделать. Выложу. кидайте свой мэйл вышлю

    Reply
  12. ah7777777

    Переделал! давай мыло, кину на проверку. А то у меня апач лег, а др тонкого нет

    Reply
  13. user853702

    У меня так и не получается загрузить классификатор((( 1с 8.2. Нажимаю загрузить с сайта РБК и ничего не происходит(((

    А так хочется загрузить,надоело вбивать в ручную.

    Reply
  14. Matilde

    Доброго дня!

    На ЗУП 3.1.4 не работает………

    Reply
  15. ah7777777

    А где заявлено что на зуп она должна работать?

    Reply
  16. ah7777777

    Переделал! Оказывается 1с начиная с версии Бухгалтерии предприятия 3.0.52.42 1С искоренили механизм загрузки с РБК. Я перенес все функции загрузки с РБК в обработку.

    Проверено на Бухгалтерия предприятия, редакция 3.0 (3.0.52.39) и Зарплата и управление персоналом, редакция 3.1 (3.1.4.167)

    Reply
  17. user790109

    Сделал все как по инструкции, ничего не появилось. Захожу вбиваю БИК и ничего не находит. зуп 3.1.4.169

    Reply
  18. ah7777777

    А загрузилось хоть что то?

    Reply
  19. user790109

    (18) нет

    Reply
  20. ah7777777

    Специально развернул чистую ЗУП31 и загрузил — все работает!

    Reply
  21. user790109

    (20)Скачал обработку, скачал архив, запустил, выбрал путь к зипу, написал «Загрузил». Захожу и в справочнике пусто. Релиз 169. Платформа 8.3.10.2580….. Хз что не так

    Reply
  22. ah7777777

    а zip файл откуда брал?

    Reply
  23. user790109

    (22) по твоей ссылке в статье

    Reply
  24. ah7777777

    тогда не понимаю почему — у меня все работает см картинки

    Reply
  25. ah7777777

    хм еще что подумал а в «справочник заходил» а пробовал его переоткрыть или F5 нажать что бы данные на форме обновились?

    Reply
  26. user612729_nkolp

    Письмо с обработкой не пришло 🙁 ………….. на почту nkolp@inbox.ru

    Reply
  27. Nkolp

    Оппс, мани пропали или не тот аккаунт …

    Reply
  28. ah7777777

    Я не знаю в чём дело Пишите в администрацию сайта.

    Reply
  29. ah7777777

    (26) выслал на почту на всякий случай

    Reply
  30. user724237

    Добрый день, в версии 1С:Комплексная автоматизация 2 (2.4.3.126) загружает с сайта bnk.zip а в прогу не прописывает и не обновляет справочник

    Reply
  31. ah7777777

    Добрый! В описании написано:»Проверено на Бухгалтерия предприятия, редакция 3.0 (3.0.52.39) и Зарплата и управление персоналом, редакция 3.1 (3.1.4.167)» Если хотите я за доп вознаграждение проверю как работает на указанной версии и если что поправлю. Пишите в личку helmer@ya.ru

    Reply
  32. ja-aa

    1. Создаем папки на любом диске (у меня D:)

    D:1CITSEXEEXTDB

    D:DatabaseGarantMorphDB

    2. Заходим на сайт rbc и Скачиваем файл bnk.zip (в браузере — http://cbrates.rbc.ru/bnk/bnk.zip)

    Переносим bnk.zip в папку D:1CITSEXEEXTDB

    3. В папке D:DatabaseGarantMorphDB создаем файл с именем Morph.dlc

    4. В стандартной загрузке классификатора банков с диска ИТС выбираем Диск D: и Загрузить

    Все загрузится.

    Вся причина:

    На диске ИТС нет файла D:DatabaseGarantMorphDBnk.zip, поэтому создаем свой диск с нужным файлом.

    Reply
  33. Ольга_tmp

    благодарю

    Reply
  34. bi0log

    (32) Пишет ошибку «На диске ИТС не обнаружен файл обработки подготовки данных классификатора БИК РФ».

    Бухгалтерия 3.0.54.15

    Reply
  35. ah7777777

    (34) это вопрос к разработчику или ответ на 32 тему? по загрузке с созданного каталога?

    Reply
  36. bi0log

    (35) Это был ответ на 32 реплику. Разработчику я был не прочь заплатить за эту обработку, но оказалось, что необходимо покупать абонемент впятеро превосходящий её по стоимости… (

    Reply
  37. ah7777777

    На одной из картинок есть мой е м а й л пишите! договоримся

    Reply
  38. nikola17

    При наличии Интернета и неоформленной подписке на ИТС обновить справочник банков можно — в пользовательском режиме установить флажок в Константе «Использовать альтернативный сервер для загрузки классификатора банков».

    Работает в БП 3.0, ЗУП 3.X и УТ 11.X

    Reply
  39. ah7777777

    И что из этого вы можете выбрать, что бы загрузить? Константу я включил. 1с уж как год назад заблокировало все альтернативные подходы.

    Reply
  40. spacecraft

    (39) может и нелогично, но выбрать «С сайта 1С»

    Reply
  41. ah7777777

    попробуйте! без логина и пароля не выйдет

    Reply
  42. spacecraft

    (41) сами пробовали? У меня нормально выходит. БП3

    Reply
  43. nikola17

    (41)Да, нужно выбрать «С сайта 1С». Без логина и пароля.

    Работает 100% на конфигурациях БП 3.0, УТ11,х, ЗУП 3.х. Загружал, и не один раз. 🙂

    Reply
  44. ah7777777

    что то не выходит. Отключите у себя инет поддержку и попробуйте!

    Reply
  45. spacecraft

    (44) константа точно установлена в true?

    Reply
  46. ah7777777

    Вы правы! в пред конф установил, а в этой взятой для теста — забыл. Да! Работает, если выбрать «С сайта 1с»!

    Reply
  47. vis_tmp

    (38)Спасибо — получилось загрузить банки именно с сайта 1С после установки этой константы!

    Reply
  48. user728803

    Кому надо, держите. Мое. УТ 11 проверено

    Reply
  49. user1294910

    На бухгалтерии 2.0 обработка работает?

    Reply
  50. ah7777777

    нет. только под УФ

    Reply

Leave a Comment

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