Импорт реестра из Сбербанка




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

42 Comments

  1. spenser123

    а чем не устраивает стандартная схема клиент-банка?)

    Reply
  2. Arguleon

    Может это для не типовых конфигураций сделано.

    Reply
  3. mixanx

    (1)

    Клиент-Банк формирует файл kl_to_1c.txt со структурой (рис.1), а эта обработка загружает файл со структурой (Рис.2). Файл(рис.2) клиенту пришел от сбера по почте. Я сперва этот файл (рис.2) пытался скормить стандартной обработке, но она выдает ошибку.

    Reply
  4. mixanx

    (2)

    Нет, это для типовой УТ 10.3

    Reply
  5. makas

    Ошибка в обработке: — Суммы загружаются без копеек. Что не правильно.

    Где и что надо подправить?

    Reply
  6. mixanx

    (5)

    Поправил. Это не ошибка была, а по ТЗ заказчика, там копеек не было, т.к у них нет цен с копейками.

    Reply
  7. afill.08

    А есть тоже самое только для 1С 8 БГУ ред.1.0 (бухг. гос. учреждения)

    Reply
  8. afill.08

    ??

    Reply
  9. Cybersant

    для управляемых форм есть подобное?

    Reply
  10. mixanx

    (9) Переписывал под УФ. Как время появится выложу тут.

    Reply
  11. Cybersant

    (10) очень ждём, готовы потестировать.

    Reply
  12. user1085032

    Добрый день! Я правильно понимаю, что в бухгалтерии предприятия работать не будет?

    Reply
  13. user1085032

    Напишите ваше сообщение

    Reply
  14. mixanx

    (12) Добрый день! Она будет работать в бухгалтерии предприятия 2.0

    Reply
  15. mixanx

    (11) Добавил версию для УФ, тестируйте)

    Reply
  16. mixanx

    Если у вас Бухгалтерия предприятия 3.0, то качайте версию для БП 3.0

    Reply
  17. Griga71

    В БП 3.0 не работает.

    Reply
  18. Griga71

    (16) в БП 3.0 не работает

    Reply
  19. mixanx

    (17) Какую ошибку выдает? Какая у вас версия БП? Делал в БП 3.0, релиз примерно полгода назад выпущенный.

    Reply
  20. user1085032

    У нас просто чистый экран. Вкладка без названия.

    Платформа: 1С:Предприятие 8.3 (8.3.13.1513)

    Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.65.72) (http://v8.1c.ru/buhv8/)

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

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

    Режим: Файловый (без сжатия)

    Приложение: Тонкий клиент

    Локализация: Информационная база: русский (Россия), Сеанс: русский (Россия)

    Вариант интерфейса: Такси

    Reply
  21. mixanx

    (20) Вы точно качаете обработку которая называется «Импорт реестра из Сбербанка для БП 3.0» ?

    Проверил сейчас на версии Бухгалтерия предприятия, редакция 3.0 (3.0.64.54), платформа 1С:Предприятие 8.3 (8.3.12.1616). Все открылось и документы создались. Чуть позже еще обновлю конфу до последней версии..Проверю, отпишу.

    Reply
  22. user1085032

    Прошу прощения. Сначала не ту версию скачал — не заметил. Но правильная все равно не работает. Интерфейс отличается от того что на картинке. Выбрать счет и статью негде. Кроме того по видимому формат самого реестра из сбера немного другой. У нас расширение (.y*) и простое переименование в txt не помогает — ошибка. Сканы и пример реестра прикладываю. Может я опять чего не так сделал — ваще ни разу не программист, извините. Может поможете?

    Reply
  23. mixanx

    (22) Да, интерфейс там другой немного другой, но принцип тот же. Счета и статьи затрат нет ,т.к документ другой создается (не ПП входящее а поступление на расчетный счет). А не работает у Вас потому, что структура файла другая. В Вашем файле длина строки больше, чем у файла для которого я писал эту обработку. Я не знаю почему Сбербанк отправляет реестры своим клиентам в разных форматах, наверное, делают как им удобно).

    Reply
  24. Griga71

    (22) У нас точно такая же проблема… формат реестра такой же…

    Reply
  25. mixanx

    user1085032 и Griga71, для вашего формата файла добавил обработку»

    Импорт реестра из Сбербанка для БП 3.0 (2)». Только не пойму где у вас в файле непосредственно сумма платежа. Оставил пока как в моем файле(первая цифра после фио/комментария). Проверяйте.

    Reply
  26. mixanx

    (22) user1085032 и Griga71, для вашего формата файла выложил обработку

    Импорт реестра из Сбербанка для БП 3.0 (2)

    Reply
  27. Cybersant

    1С:Предприятие 8.3 (8.3.13.1513)

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

    Режим: Серверный (сжатие: усиленное)

    Через Файл-Открыть пробовал обе обработки. У второй ошибка: Не удалось прочитать файл. Каталог не обнаружен.

    Через интерфейс добавления внешней обработки ошибка:

    Метод объекта не обнаружен (СведенияОВнешнейОбработке)

    Reply
  28. mixanx

    (27) Через файл-открыть должно работать. Возможно у вас стоит запрет на запуск внешних обработок.

    Метод, «СведенияОВнешнейОбработке»,я не добавлял, постараюсь добавить в ближайшее время.

    И формат файла у Вас, к сожалению, отличается от файла user1085032(строка другой длины).

    Вообщем, как понял обработку надо править для каждого конкретного случая. Код обработки открыт.

    Reply
  29. Cybersant

    (28) похоже надо учесть возможность корректной работы в клиент-серверном режиме. при попытке чтения файла с компьютера пользователя показывает ошибку.

    Reply
  30. Griga71

    Мой формат реестра (в приложении) не открывает (индекс находится за пределами массива). Реестр user1085032 открылся.

    Reply
  31. user1098498

    1С8.3 Бухгалтерия предприятия, редакция 3.0 (3.0.64.34)

    Файл не подгружается. Программа пишет «Невозможно подключить дополнительную обработку из файла.

    Возможно, она не подходит для этой версии программы». Я что-то делаю не так? Есть ли выход из ситуации?

    Reply
  32. mixanx

    (31) У Вас база файловая или клиент-северная? Для файловой писалась обработка. Через файлоткрыть должно открываться, проверено на многих платформах.

    Reply
  33. Denis_CFO

    (31)

    Невозможно подключить дополнительную обработку из файла.

    Возможно, она не подходит для этой версии программы

    откройте, как сказал автор через Файл/Открыть, потому что

    Метод, «СведенияОВнешнейОбработке»,я не добавлял
    Reply
  34. Shish_besh

    1С:Предприятие 8.3 (8.3.13.1644) на облачной через меню открыть выдает сообщение: Не удалось прочитать файл: {ВнешняяОбработка.импортсосбера.Форма.ФормаУпр.Форма(168)}: Ошибка при вызове метода контекста (Прочитать): Каталог не обнаружен ‘C:UsersUserDocumentsBANKРеестры2018Банк72019Новая папкаНовая папка5078023147_40702810200000005330_281.txt’

    1С:Предприятие 8.3 (8.3.13.1513) файловая выдает сообщение :индекс за границами массива

    Пробовали и в формате .txt и в формате.y

    В чем проблема еще может быть?Спасибо

    Reply
  35. mixanx

    (34)

    Здравствуйте!

    У Вас такая же проблема, что и описана выше. Структура вашего файла отличается от той для которой изначально писана обработка. Отличается несильно, нужно поправить обработку. Налоговая файлы формирует по разному, отличатся может и длина строки и порядок следования данных, поэтому нужно править обработку для каждого конкретного случая.

    Reply
  36. Shish_besh

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

    Reply
  37. mixanx

    (36) Добрый! Могу, но за платно.

    Reply
  38. helenakar

    Добрый день! Открываю обработку, просто чистый экран.

    Что делать?

    Reply
  39. mixanx

    (38) Добрый день! Вы скорей всего скачали обработку по верхней ссылке, это обработка для Бухгалтерии 2.0, а открываете в Бухгалтерии 3.0. Качайте нужную.

    Reply
  40. helenakar

    А какую? вторую или третью?

    Reply
  41. helenakar

    Импорт реестра из Сбербанка для БП 3.0:

    или

    Импорт реестра из Сбербанка для БП 3.0 (2):

    чем они отличаются?

    Reply
  42. mixanx

    (40) Это зависит от структуры вашего файла, почитайте комментарии. Обе обработки для БП 3.0, они запустятся. И вполне вероятно, что именно для вашего файла не подойдет не 2ая, ни 3яя обработка. А может и подойдет. Налоговая их по разному формирует.

    Reply

Leave a Comment

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