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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *