Перенос данных из "Парус 7" в 1С 8.1




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

20 Comments

  1. HIgor

    Весь экспорт из Паруса в Excel делается встроенными в Парус средствами. Делаешь через конструктор запросов нужный запрос и выводишь в Excel

    Reply
  2. Bor_ka

    Обработка переносит таблицы один к одному, что не требует знаний «конструктора запросов» Паруса ( чем не всегда владеет программист 1с или администратор ). С конструктором я не сталкивался. Если у тебя есть документация, скинь пожалуйста ссылку.

    Reply
  3. marsohod

    Может, я что-то не понял… ведь Excel вообще-то и сам может открыть файл *.dbf… 😮

    И где, собственно, предмет обсуждения? 😮

    Да, и еще: разработка

    Reply
  4. Bor_ka

    (3) Excel открыть может… Но, не открывает.

    Нет, файл не поврежден. Excel не всяческие dbf-ы открывает.

    Reply
  5. HIgor

    (2) Ссылки нет. Но он простой (хотя глючный немного). Идешь по меню Паруса Функции/Запросы. Имена таблиц расписаны там же, поля опытным путем определяешь (хотя многие тоже очевидны).

    Косяки: Иногда криво конструирует (может поправили, незнаю т.к. в Парусе 4 года не работаю, до этого 13 лет отработал) поэтому приходилось некоторые запросы ручками рихтовать, а после правки обратно конструктор не получишь (в отличии от 1С).

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

    Я в этом году таким образом 2 конторы перевел на 1С (запросы + утилитка импорта документов и справочников из EXCEL)

    Reply
  6. Alex_Smolensky

    (4) Все DBF-файлы в VFP объеденены в базу, потому и структура DBF чуток отличается от старых DBF. Все это можно открыть и посмотреть в Эксель в любом виде через ИмпортВнешнихДанных, далее либо Импортировать — новый источник — ODBC, либо через запрос.

    Reply
  7. Bor_ka

    (6) Угу-у-у! Я плюсик поставил!

    Меню: Данные — Импорт внешних данных — Создать запрос…

    Reply
  8. sklowsky

    Готовые конвертеры из Паруса в 1С давно отлажены. Технология переноса данных не использует промежуточную выгрузку в таблицы Excel, а работает непосредственно с файлами базы данных Парус: подробнее…

    Reply
  9. sergb1979

    использовал часть кода.

    приходится переписывать под себя

    Reply
  10. suhar

    Частично помогла. Но всё же много чего пришлось делать ручками!

    Reply
  11. Acasta

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

    Reply
  12. garaevilnur

    мы вообще на прямую к таблицам подключились и забрали что надо! разобрались со структурой и алга!

    Reply
  13. garaevilnur

    через эксель много данных не вытащить

    Reply
  14. garaevilnur

    вот еще товарищ переносит за 10ку http://sites.google.com/site/perenosdannyhizparusav1s/

    Reply
  15. garaevilnur

    вот еще ссылка на хороший парусный форум http://forum.parus.ru/index.php?mode=thread&sub=172780

    Reply
  16. garaevilnur

    http://www.parus.ru/solutions/corporate/system/docs/

    набор литературы для изучения структур таблиц

    Reply
  17. student163

    Перенос из Парус в 1С ЗКБУ 8.2

    Перенос из Парус в 1С ЗУП 8.2

    romanx63@mail.ru

    Reply
  18. al461sy

    Безумно благодарна, сейчас как раз этим занимаюсь

    Reply
  19. Medvedik

    Вот и мне пришлось с этим столкнуться.

    Увы, вопрос загрузки спецодежды-оснастки со своими заморочками в данной обработке обойден стороной, или мне так повезло, что Заказчик вел спецуху как ОСы.

    Reply
  20. tindir

    Не хочется отдавать базу другим людям для переноса. Застрял на одном неприятном месте с переносом паруса: Есть таблица начислений и удержаний в парусе. Надо к этим начислениям прикрутить источники финансирования, а где лежать и как работать с ними не понимаю

    Reply

Leave a Comment

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