Skip to content

Instantly share code, notes, and snippets.

@Henxed
Last active May 27, 2020 10:27
Show Gist options
  • Save Henxed/5fb2701fb1256bfeedd966f6793aafd4 to your computer and use it in GitHub Desktop.
Save Henxed/5fb2701fb1256bfeedd966f6793aafd4 to your computer and use it in GitHub Desktop.
DBF to XML для Сбербанк Бизнес Онлайн на PHP
<?php
set_time_limit( 24192000 );
ini_set( 'memory_limit', '-1' );
$files = glob( 'dbf/*.dbf' ); //адрес где лежат все DBF
foreach( $files as $file )
{
dbfToXML($file);
}
function dbfToXML($file)
{
$config = [
'inn' => '5610000000', //ИНН организации
'contract' => '44444444', //Номер договора
'org' => 'ООО "Ложечка"', //Название вашей оргнизации как в договоре
'bank' => '0000' //Номер отделения Сбербанк
];
$date = date("Y-m-d"); // 2020-05-27
$file_info = pathinfo($file);
$xmlFile = $file_info['filename'].'.xml';
$output_path_file = 'xml/'.$xmlFile; //Путь куда сохранять xml (будет сохранять туда, где лежит исполняющий файл). Создайте папку xml
$registr = substr($file_info['filename'], -3);
$summ = 0;
if (!$dbf = dbase_open( $file, 0 )) {
return false;
}
$num_rec = dbase_numrecords( $dbf );
$dom = new DomDocument('1.0', 'windows-1251');
$domEl = $dom->createElement('СчетаПК');
addAttr($dom, $domEl, 'ДатаФормирования', $date);
addAttr($dom, $domEl, 'НомерДоговора', $config['contract']);
addAttr($dom, $domEl, 'НаименованиеОрганизации', $config['org']);
addAttr($dom, $domEl, 'ИНН', $config['inn']);
addAttr($dom, $domEl, 'НомерРеестра', $registr);
addAttr($dom, $domEl, 'ДатаРеестра', $date);
$r = 1;
for ($i = 0; $i < $num_rec; $i++) {
$row = dbase_get_record_with_names( $dbf, $i );
if((int)$row['B'] && !empty(trim($row['E'])) ){
$last_name = trim(iconv('CP866', 'utf-8', $row['C']));
$check = trim(iconv('CP866', 'utf-8', $row['B']));
$name = trim(iconv('CP866', 'utf-8', $row['D']));
$middle_name = trim(iconv('CP866', 'utf-8', $row['E']));
$price = trim(iconv('CP866', 'utf-8', $row['F']));
$root = $dom->createElement('ЗачислениеЗарплаты');
$user = $dom->createElement('Сотрудник');
$userAttr = $dom->createAttribute('Нпп');
$userAttr->value = $r;
$user->appendChild($userAttr);
$root->appendChild($user);
$domEl->appendChild($root);
$ln = $dom->createElement('Фамилия', $last_name);
$user->appendChild($ln);
$ln = $dom->createElement('Имя', $name);
$user->appendChild($ln);
$ln = $dom->createElement('Отчество', $middle_name);
$user->appendChild($ln);
$ln = $dom->createElement('ОтделениеБанка', $config['bank']);
$user->appendChild($ln);
$ln = $dom->createElement('ЛицевойСчет', $check);
$user->appendChild($ln);
$ln = $dom->createElement('Сумма', $price);
$user->appendChild($ln);
$summ += $price;
$r++;
}
//$attr->appendChild($dom->createTextNode($arrayWithTracks[$i]['source']));
//$track->appendChild($attr);
}
$domEl->appendChild($dom->createElement('ВидЗачисления', '05'));
$ctrl = $dom->createElement('КонтрольныеСуммы');
$count_row = $dom->createElement('КоличествоЗаписей', $r-1);
$ctrl->appendChild($count_row);
$sum = $dom->createElement('СуммаИтого', $summ);
$ctrl->appendChild($sum);
$domEl->appendChild($ctrl);
$dom->formatOutput = true; // если поставьте, если хотите в одну строку
// Сохраняем XML
$dom->saveXML();
$dom->save($output_path_file); // Сохраняем
}
function addAttr($dom, $domEl, $title, $data){
$domAttr = $dom->createAttribute($title);
$domAttr->value = $data;
$domEl->appendChild($domAttr);
$dom->appendChild($domEl);
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment