[XLStoMXL] Конвертер документов MS Excel 2000 в формат табличного документа 1С:Предприятия




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

49 Comments

  1. Filipp_inf

    Все красиво, только непонятно как же работать с этим конвертером, который .EXE, инструкций нет, а при запуске просто «промелькивает» , и все…

    Reply ↓
  2. Robert

    ОК. Это утилита командной строки. Промелькивает как раз инструкция. В командной строке нужно написать:

    XLStoMXL.exe filename.xls

    Утилита на выходе создает по файлу MXL для каждого листа XLS.

    Reply ↓
  3. Я тока не понял? это что твоей програмка стала? или и была твоей

    Reply ↓
  4. Robert

    И была моей

    Reply ↓
  5. Filipp_inf

    И еще нюанс о котором не говорится в ReadMe — это то, что имя исходного файла должно быть задано только латинскими буквами.

    Reply ↓
  6. Robert

    Можно и русскими. Под XP отрабатывает нормально. Если имя файла с пробелами, то его, как обычно, нужно заключить в кавычки.

    XLStoMXL.exe «Мой любимый файл.xls»

    Reply ↓
  7. VladimirY

    У меня объединение ячеек не перешло 🙁

    Reply ↓
  8. GriAI

    Сработало практически хорошо, замечания:

    1) В некоторых строках поменялось выравнивание (вместо «по значению» стало «право»)

    2) Граница разукрасилась

    проверял на Препроводительной ведомости из К+ (приказ N 199-П от 9 октября 2002 г. Приложение 8)

    Reply ↓
  9. bear_

    Нужная вещь! Сразу пустил в дело, все получилось ОК!

    Reply ↓
  10. azernot

    А как бы ещё задавать конечное имя (путь)…

    Reply ↓
  11. Darth_Sim

    Аффтару зачод! Работает реально стабильнее и качественнее всяких внешних обработок. Однозначный must have!

    Reply ↓
  12. maysi

    При попытке использовать отчет второй раз 1С вываливается безо всяких предупреждений.

    ОБИДНО!!!

    Reply ↓
  13. maysi

    Извиняюсь, ошибочка вышла…

    Комментарий относился к обработке «[MXLtoXLS] Сохранение больших таблиц в EXCEL» от Che_Burashka.

    Reply ↓
  14. Bod

    СПС

    Reply ↓
  15. soft25

    ну что сказать…..молодец…

    Reply ↓
  16. molot

    Спасибо! Спас!

    Reply ↓
  17. Maxis

    Как ее применять? Exe-шник быстро закрывается

    Reply ↓
  18. Maxis

    XLStoMXL.exe — это утилита командной строки.

    Порядок использования:

    XLStoMXL.exe filename.xls

    Reply ↓
  19. garaevilnur

    Зачот … отлично все работает!!!

    Reply ↓
  20. Алла М

    А нельзя ли для чайников -бухгалтеров, которые работают в винде и забыли (или не знали)как работать в Досе,но знают 1С пошагово объяснить, как это все запустить?

    Reply ↓
  21. German

    Даже формы из консультанта взял.

    Reply ↓
  22. mrnovel

    красиво. молодчина.

    Reply ↓
  23. rasswet

    зачетная штука! СПАСИБО!

    Reply ↓
  24. sawserg

    Вовремя наткнулся на эту программу, так как мне не очень удобны загрузки из Excel-файлов, я обычно копировал информацию сначала в *.mxl через буфер обмена. Естественно, это муторно.

    Reply ↓
  25. Winston

    Плюс+++

    Reply ↓
  26. zilot123

    Конвертор хороший. Только если в екселевском файле есть формулы, то при открытии xml файла пишет невозможно отркыть файл ) Если что знайте где копать )

    Reply ↓
  27. sol-boris

    Класс, очень нужная вещь!

    Reply ↓
  28. AS108

    Спасибо, нужная вещь!

    Reply ↓
  29. snic

    отличная утилита!!!

    Reply ↓
  30. sokir

    Не совсем корректно перенесло: часть таблицы ушла далеко вправо, но удалить лишнее 5 сек делов, а перенос вручную из экселя пол дня + испорченный настрой на весь день от занятия хренью!

    Поэтому большой жирный +.

    Reply ↓
  31. tvssspb

    Конвертнул, чуть подправил и… Счастье!!!

    +

    Автору большое спасибо! 😀

    Reply ↓
  32. Lito86

    Куда пиво высылать 😀

    Reply ↓
  33. Tristania

    Спасибо!

    Reply ↓
  34. nickkey

    Большое спасибо очень помогла для создания отчета начальству и для саморазвития :)))

    Reply ↓
  35. sergnik

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

    кое-где заменило украинское «і» на цифру 1, остальное форматирование конвертнулось правильно

    Reply ↓
  36. KrakoZyabl

    Это вещь мало сказать нужная.. она еще и ПОЛЕЗНАЯ для здоровья!!!=), т.к. избавляет от кропотливого труда перерисовывания всяких Excel’евских формочек из консультанта и т.д.. СПасибо большое за предоставленную возможность воспользоваться данным решением +++.

    p.s. и где я только раньше был..не зная о сием.

    Reply ↓
  37. ch1mera

    Спасибо большое, очень пригодилось.

    p.s.было бы неплохо это сделать в виде обработки под 8.1/8.2, чтоб была возможность как задать имя выходящего файла, так и сразу просмотр MXL-файла

    Reply ↓
  38. scanner1980

    А чем проект Иоксель не нравится? Или о нем никто не знает?

    Проект ЙОКСЕЛЬ

    Йоксель (Yoksel) – это набор программных средств для работы с табличными документами. В настоящее время Йоксель представлен в виде:

    Самостоятельного приложения (*.exe).

    Внешней компоненты для 1С:Предприятия 7.7, которая предоставляет функции Йокселя разработчикам через встроенный язык 1С:Предприятия.

    COM-сервера для любого приложения, поддерживающего технологию COM.

    Возможности Йокселя:

    Прямое чтение файлов Excel – можно открывать книгу Excel, получать список листов и загружать любой лист в табличный документ Йокселя. При чтении сохраняется форматирование табличных документов Excel и внедренные объекты. Подробнее.

    Прямая запись файлов Excel – можно создать книгу, заполнить список листов и записать книгу в файл. При этом будет сохранено форматирование и внедренные объекты табличных документов для листов. Конвертер Йокселя работает на несколько порядков быстрее встроенного в 1С:Предприятие конвертера и обеспечивает более высокое качество полученных документов. Подробнее.

    Поддержка табличных документов 1С:Предприятия – поддерживается формат встроенных табличных документов в полном объеме. Документы можно загружать и записывать. Подробнее.

    Элемент управления, позволящий отображать табличные документы на диалоговых формах 1С:Предприятия. Подробнее.

    Преобразование табличных документов в файлы графических форматов: BMP, JPEG и PNG. Подробнее.

    Расширенная работа с отчетами. Йоксель предоставляет разработчикам под 1С:Предприятие 7.7 ряд возможностей, отсутствующих в 1С:Предприятии и делающих работу с отчетами удобнее. Подробнее.

    Показать

    Reply ↓
  39. KrakoZyabl

    (39) Спасибо, обязательно посмотрю…да я не знал о таких вот вещах(((

    Reply ↓
  40. nll.jojo

    сразу начал использовать, зачет

    Reply ↓
  41. vitekryazan

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

    Reply ↓
  42. fixin

    плюс за идею…

    только думаю, можно не в ЭКЗЕ, а в 1С написать.

    Reply ↓
  43. dagroma

    Великолепная штука, даже когда не в 1С

    Reply ↓
  44. eugen91

    Красота, то что искади на протяжении года!

    Reply ↓
  45. Margaritaya

    Спасибо,круто.

    Reply ↓
  46. puritan

    Автору огромный респект! Сэкономил кучу времени.

    Reply ↓
  47. _o_o_

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

    ОООчень помогли.

    У меня, правда, отработало с сообщением Unknown error.

    Но файл создался, внутренность его 1С распознала. Волшебно!

    Reply ↓
  48. chebser

    Наткнулся сейчас на эту замечательную утилиту через 9 лет после её публикации. Автору респект! Для чайников: кладём исходный файл в папку с экзешником, нажимаем Win+R, в появившееся окно перетаскиваем екзешник, после экзешника дописываем полное имя исходного файла, например, maket.xls, нажимаем ОК — и готово, mxl появится в папке с экзешником.

    Reply ↓
  49. KrakoZyabl

    (49) Пользовался этой обработкой раньше, да, хорошо помогала при создании печатных форм на основе экселя. Сейчас платформа 1С 8.3. позволяет открыть файл ексель и можно оттуда скопировать в таблицу mxl содержимое.

    Reply ↓

Leave a Comment

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