Выгрузка зарплаты на карты в сбербанк в DBF формате




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

77 Comments

  1. italianois

    хорошая обработка, я сам в свое время намучился с выгрузкой в банк, то не там запятая, то не тот порядок данных.

    Reply
  2. italianois

    отличная штука, я сам долго парился с этим банком пока добился правил выгрузки от них.

    Reply
  3. artbear

    (0) Цитата «Взял вот эту обработку и немного переделал»

    ссылка «обработку» указывает на публикацию не для ЗУП 🙁

    Reply
  4. RubikJan
    artbear пишет:

    (0) Цитата «Взял вот эту обработку и немного переделал»

    ссылка «обработку» указывает на публикацию не для ЗУП

    сори ссылку поправил… если еще точнее то этот файл

    Reply
  5. Dred88

    Извините, если написал не сюда, но нет ли такой же для версии 7.7? Может быть у кого то завалялась?)

    Reply
  6. annkod

    Вот спасибо-то. Не придется парится — все готовенькое 🙂

    Reply
  7. annkod

    (5) Что-нибудь типа этого: http://infostart.ru/public/71856/

    Reply
  8. Арчибальд

    (5) Dred88, обращайтесь.

    Reply
  9. RubikJan
    Dred88 пишет:

    Извините, если написал не сюда, но нет ли такой же для версии 7.7? Может быть у кого то завалялась?)

    добавил для 7.7 протестируйте

    Reply
  10. TrinitronOTV
    RubikJan пишет:

    добавил для 7.7 протестируйте

    спасибо, переходим на сбербанк, думаю пригодится

    Reply
  11. victuan

    «Обработка может использоваться дополнительная внешняя обработка.»

    Можно перевод на смысловой язык?

    Надеюсь, обработки написаны лучше чем сконструирована эта фраза?

    PS. За скриншоты поставил бы «-«. Разработчику проще затенить значения полей ввода, чем подменить их нейтральным текстом.

    Reply
  12. RubikJan
    victuan пишет:

    » Обработка может использоваться дополнительная внешняя обработка. »

    Можно перевод на смысловой язык?

    Надеюсь, обработки написаны лучше чем сконструирована эта фраза?

    PS. За скриншоты поставил бы «-«. Разработчику проще затенить значения полей ввода, чем подменить их нейтральным текстом.

    ну да, вы правы, пропущено наречие «как»: «как дополнительная внешняя обработка»…

    по поводу скриншотов, действительно проще затенить… а в чем собственно неудобство для восприятия?

    Reply
  13. Dred88
    RubikJan пишет:

    добавил для 7.7 протестируйте

    выгрузил пробную- вроде бы работает( В екселе посмотрел), бухам скажу — в сбербанк отнесут) Спасибо

    Reply
  14. wowo1980

    Скачивала отсюда подруга!Очень удобная обработка! работает без проблем!

    Reply
  15. Trinitron

    вот есть такая строка:

    ИмяФайлаЛС = КаталогИБ()+»ExtFormsлс.txt»;

    что этот файл обозначает или что в нем?

    Reply
  16. RubikJan
    Trinitron пишет:

    вот есть такая строка:

    ИмяФайлаЛС = КаталогИБ()+»ExtFormsлс.txt»;

    что этот файл обозначает или что в нем?

    чтобы не трогать конфигурацию решено было номера лицевых счетов хранить в файле лс.txt, который лежать будет в папке ExtForms информационной базы…

    Reply
  17. TrinitronOTV
    RubikJan пишет:

    чтобы не трогать конфигурацию решено было номера лицевых счетов хранить в файле лс.txt, который лежать будет в папке ExtForms информационной базы…

    понятно, тогда какова его структура?

    Reply
  18. RubikJan
    TrinitronOTV пишет:

    понятно, тогда какова его структура?

    Если бы вы открыли файл для редактирования кнопкой на форме, вы бы увидели комментарий с описанием структуры, хотя тот же комментарий можно увидеть из кода:

    456545126515616516|ИВАНОВ ИВАН ИВАНОВИЧ

    Reply
  19. demon852002

    Всё хорошо, только про удержания банка забыли! :0)

    Reply
  20. Еле

    очень хорошая обработка:)

    Reply
  21. Raider

    Очень большая просьба кто может выслать на маил serge_grishin@rambler.ru эту обработку

    За ранее спасибо

    Reply
  22. shekl

    спасибо , избавили от основной части работы , осталось только заменить один документ выплаты на список и наши бухи будут счастливы , как и я ))

    Reply
  23. KliMich

    Однозначно плюс.

    Раньше выгружал в пару «Сбербанковских» файлов(ХХХХХХХХ.kХХ и ХХХХХХХХ.sХХ).

    А потом (по просьбе буха) сделал и в DBF.

    Может стоит добавить выгрузку и в формате Сбербанка (ХХХХХХХХ.kХХ и ХХХХХХХХ.sХХ)

    Reply
  24. RubikJan

    (23) KliMich, необходимо знать формат выгрузки. отпишите в личку, можно и добавить…

    Reply
  25. KliMich

    (24) Делал давно, стал выяснять, может там изменился формат выгрузки и оказалось, что СберБ в этом формате не принимает «зарплатные списки»! А берет только в DBF.

    Поэтому дико извиняюсь не понадобиться

    Reply
  26. Полковник

    Большое спасибо, отличная обработка. Да еще и вовремя для ЗиК 7.7 очень срочно понадобилась, потому что часть сотрудников хотят получать ч/з сб/банк. Осталось придумать как делать выгрузку на два банка. Вобщем +.

    Reply
  27. Valdis_KH

    а для такой структуры возможно?

    Reply
  28. RubikJan

    (27) Valdis_KH,

    из вашего вложения можно определить только количество полей и их мена. и то с последней колонкой вопрос.

    ни формат выходного файла, ни его кодировка, ни типы полей, ни структура шапки из этого не ясны…

    а так в принципе возможно, почему нет.

    Reply
  29. Valdis_KH

    имя файла: spMMMMNN.DBF, где

    sp — постоянное,

    MMMM — номер договора,

    NN — порядковый номер реестра.

    Последняя колонка не заполняется.

    1-ая колонка номер отделения банка (число 4 знака)

    2-ая филиал (число 4 знака),

    3-ая …

    структура в файле

    Reply
  30. sssvetl

    у меня вообще ничего не получилось в варианте для ЗБУ, не дает выбрать документ выплаты, нажимаю на ссылка на объект, ничего не происходит

    Reply
  31. RubikJan

    (30) sssvetl,

    сообщите номер релиза вашей конфигурации. при запуске обработки никаких ошибок не появляется?

    Reply
  32. sssvetl
    RubikJan пишет:

    (30) sssvetl,

    сообщите номер релиза вашей конфигурации. при запуске обработки никаких ошибок не появляется?

    Все разобралась, там в поле тип для ссылканаобъект стоит «строка», поставила ведомость в банк и все ОК. Спасибо.

    Reply
  33. sssvetl

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

    Reply
  34. RubikJan
    sssvetl пишет:

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

    может вы используете другую конфигурацию например «Зарплата и Управление Персоналом»? на ней обработка не тестировалась

    в противном случае сообщите номер релиза. только что проверил еще раз на релизе 1.0.31.2 — все работает.

    Reply
  35. ilfm

    Добрый день!

    А для такой конфигурации будет работать?

    Reply
  36. RubikJan
    структура в файле

    (29) Valdis_KH, все замечательно, только…

    1. какая конфигурации, 7.7. ЗиК? 8.2 ЗиК? иная (нужное подчеркнуть)

    2. таки кодировка выходного файла (DOS/WINDOS)

    3. вопрос по полю 4 (KV) (заполняется произвольно/выбор из списка/константа)

    4. по возможности, если конечно не секрет… какой регион сбербанка или какой банк требует данный формат, дабы может кому еще пригодится 🙂

    Reply
  37. RubikJan
    ilfm пишет:

    Добрый день!

    А для такой конфигурации будет работать?

    нет, для такой конфигурации не предусматривалось… но можно и подправить если очень надо

    Reply
  38. ilfm
    RubikJan пишет:нет, для такой конфигурации не предусматривалось… но можно и подправить если очень надо

    Добрый день! Очень надо!!!

    Прилагаю еще DBF файлик

    Reply
  39. ilfm

    Извините!нашел

    «1С 7.7 Зарплата и кадры. Выгрузка данных о сотрудниках для оформления дебетовых карт в Сбербанке © ankr»

    то что конкретно нужно, но опять же не под мою конфигурацию.

    Reply
  40. Valdis_KH

    (36)

    1) 8.2 ЗиК бюджет

    3) поле 4 (KV)- константа (53)

    4)КП ОСБ 729

    Reply
  41. RubikJan
    ilfm пишет:

    Извините!нашел

    так вам необходимо оформить карты, а не выгрузить зарплату на них?

    Reply
  42. ChLN

    Попробовала выгрузить, получилось, спасибо за обработку

    Reply
  43. vovkakursk

    Спасибо огромное! Классно.

    Reply
  44. post279

    Автору спасибо!

    Reply
  45. olaf_art

    а эта выгрузка подходит для любого отделения сбербанка в СПб?

    Reply
  46. fin7

    УРА-А-А!!! Спасибо большое. Все работает. Сберегла кучу времени!!!

    Reply
  47. nll.jojo

    Раньше выгружал в пару «Сбербанковских» файлов(ХХХХХХХХ.kХХ и ХХХХХХХХ.sХХ).

    А потом (по просьбе буха) сделал и в DBF.

    Может стоит добавить выгрузку и в формате Сбербанка (ХХХХХХХХ.kХХ и ХХХХХХХХ.sХХ)

    Reply
  48. KliMich

    Огромное спасибо!

    Reply
  49. limmon

    Отличная штука.

    Reply
  50. OleGazz

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

    Reply
  51. BAPPKAH

    Подскажите под 1С:Зарплата и кадры бюджетного учреждения 8.2 подойдет?

    Reply
  52. RubikJan

    (51) BAPPKAH, в заголовке же публикации указано: ЗиК БУ 8.2

    Reply
  53. BAPPKAH

    спасибо уже поставил и пользуюсь))) еще одной головной болью меньше)) бухгалтерия счастлива))

    Reply
  54. Valdis_KH

    можно доработать обработку для ОСБ 729, нужно чтоб выбиралось несколько ведомостей и список формировался с общими суммами по всем ведомостям?

    Reply
  55. pas_net

    спасибо большое

    Reply
  56. OleGazz

    а никому не приходило письмо что они с 1 мая поменяли что то в названии файла и в самой таблице? никто не переделывал случайно уже?

    Reply
  57. RubikJan

    (54) Valdis_KH,

    добавлено, пользуйтесь

    Reply
  58. avk2009

    Плюсую, сэкономил свое рабочее время

    Reply
  59. Valdis_KH

    (57)

    можешь скинуть на ящик а то sm не хватает, krot2906@rambler.ru? заранее спасибо

    Reply
  60. Holly-khv

    Обработка пришлась очень кстати. Перешли на новый банк как всегда «вовремя» и надо было очень быстро организовать выгрузку зарплаты… И бухгалтерия счастлива и мне меньше работы. Спасибо!

    Reply
  61. ProkopyukIN

    обработку не могу скачать так как не хватает start money, но когда то тоже пришлось писать. так как банковский детсад абсолютно не устраивал. если кому надо, могу выложить в качестве алтернативы

    Reply
  62. Valdis_KH

    а можно сделать чтобы поле 4 (KV)бралось из счета, последние 2 числа, просто у одних карточка зарплатная, у других социальная, а у третьих вообще сберкнижка

    Reply
  63. Valdis_KH

    (57)

    скачал, у меня формат другой SP

    Reply
  64. Valdis_KH

    (61) ProkopyukIN,

    выложи посмотрю и проверю на своем банке

    Reply
  65. ProkopyukIN

    ок. до завтра подправлю, тчоб более менее универсальная была и выложу. на данный момент конкретно под нашу компанию заточена.

    Reply
  66. avcherkasov

    Подскажите, а для аваля у вас нет ничего подобного? Или эта обработка универсальная?

    Reply
  67. RubikJan

    «скачал, у меня формат другой SP»

    (63) Valdis_KH,

    описание формата прикладывалось. сформулируйте Ваш.

    поле KV всегда 2 последних знака счета?

    (66) avcherkasov,

    кто есть «аваль»?

    Reply
  68. avcherkasov

    (67) Аваль — это банк. Спасибо, уже нашёл, что искал.

    Reply
  69. Valdis_KH

    (67)

    описание прикладывалось ранее и ты делал эту обработку(смотри 29.), но мне теперь надо чтоб поле KV бралось из счета последние 2 цифры

    Reply
  70. k

    Спасибо за обработку, а для кодировки с наименованием файла s0u2n эта обработка подойдет?

    Reply
  71. k

    У нас наименование файла такое SXXXXmdn.dbf,где s — постоянное значение, XXXX — КОД ЗАРПЛАТНОГО ДОГОВОРА, m — номер текущего месяца,d — день текущего месяца, n — номер файла за день.Подойдет ли эта обработка?

    Reply
  72. Lara_Fa

    Спасибо, большое!! Очень хорошая обработка. Немного подкорректировала под себя в части выборки данных. И пришлось тип ссылки на документ поменять — что-то не установилась она автоматически в обработку ) но в остальном — все просто супер!!!

    Reply
  73. Valdis_KH

    после обновления стало выдавать такую ошибку

    {Форма.Форма.Форма(5)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок)

    ФИО = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Данные.ФизЛицо.Наименование, » «);

    релиз 52.1 ЗиК БУ файл SPXXXXNN.***

    Reply
  74. RubikJan

    (73) Valdis_KH,

    Исправлено, но можете и сами поправить 2 буквы:

    ФИО = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Данные.ФизЛицо.Наименование, » «); // заменить на:

    ФИО = ОбщегоНазначенияЗК.РазложитьСтрокуВМассивПодстрок(Данные.ФизЛицо.Наименование, » «);

    Reply
  75. Valdis_KH

    спасибо огромное, все плучилось

    Reply
  76. Valdis_KH

    скажи для SPXXXXNN.*** делал чтобы можно было выбирать несколько ведомостей?

    Reply
  77. sorb

    В посте написано: «По просьбе добавлена обработка, формируюцая файл по формату SPXXXXNN.***:»

    А где эта обработка, стесняюсь спросить?

    В обработке «Выгрузка зарплаты на карты в сбербанк в DBF формате (по нескольким ведомостям)» ничего подобного нет

    Reply

Leave a Comment

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