Загрузка документов и справочников из EXCEL (для 8.1)




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

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

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

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

44 Comments

  1. Andruykha

    Сэнкс

    Reply
  2. Serj kuban

    может у кого пожилания будут

    Reply
  3. zakzai

    есть пожелание )) :

    работа с табличной частью документа «корректировка записей регистров».

    Reply
  4. Serj kuban

    zakzai ок попробую выложу, только как быстро это надо

    Reply
  5. rasswet

    {Форма.Основная(164)}: Итератор для значения не определен

    Для Каждого Кол из ЭлементыФормы.ДанныеЛиста.ТекущаяСтрока цикл

    Reply
  6. jurba

    Обработка очень нужная, но пишет вот такую ерунду, когда вибираешь справочник или документ в который надо загрузитью Может формат таблицы должен быть определенным?

    {Форма.Основная(204)}: Индекс находится за границами массива

    нСтр[0] = «Код»;

    Reply
  7. Serj kuban

    да нет вродепроверял, щас посмотрю

    Reply
  8. Cyberboy

    {Форма.Основная(455)}: Преобразование значения к типу Число не может быть выполнено

    Для к = Заг+1 по Строк цикл

    И что с этим делать??? Не получается ни один файл экселя загрузить 🙁

    Reply
  9. Serj kuban

    Cyberboy щас проверяю на документах, платежное поручение раскажу что как

    Reply
  10. Serj kuban

    люди еще раз проверил все работает

    Reply
  11. zakzai

    (4) как получится… вещь нужная, для бухов бесценная ))

    Reply
  12. Cyberboy

    Serj kuban Да заработало!!!! Однозначно плюс. Кстати я много обработка для переноса таким методом смотрел но не одна не работала так как надо.

    Reply
  13. Cyberboy

    Serj kuban

    У меня такой вопрос. Если я загружаю данные из экселя в документ, то когда он не находит в справочнике номенклатуру, он просто оставляет эту строчку в документе пустым и ни куда не правильную номеклатуру не добовляет?

    Reply
  14. akat65

    На 3 шаге обработки можно сортировку объектов (спр.,доки) сделать

    по алфавиту…

    Reply
  15. akat65

    +14 на 4 шаге сопоставление с реквизитами можно пошире и фиксировать

    столбец реквизит

    Reply
  16. akat65

    Извиняюсь 15 можно снять))

    Reply
  17. Cyberboy

    В в сомой обработке можно указывать постоянный реквизит?? К примеру ед.измерения или коэффициент.

    Reply
  18. Serj kuban

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

    Reply
  19. Lena808

    пытаюсь загрузить справочник контрагентов пишет слудющую ошибку {Форма.Основная(207)}: Индекс находится за границами массива

    нСтр[0] = Рек;

    подскажите пожалуйстаааааааааааааааааааааааааааааааааа!!!!!!!!!!!!!

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

    Reply
  20. Cyberboy

    Serj kuban

    Что то не могу понять тогда как их устанавливать?

    Reply
  21. gamer29

    как импортировать с екселя в 1С 7.7 ?

    сори за оффтоп)

    Reply
  22. Serj kuban

    gamer29 мыль мыло кину обробоку

    Reply
  23. Serj kuban

    или пиши на ICQ582246552

    Reply
  24. Serj kuban
  25. alex_4x

    Было бы мне кажется разумно иметь некое соответствие для автоматического заполнения пропущенных реквизитов, ну например валюта по умолчанию, единица измерения… соответсвие по типу название реквизита -> элемент.ссылка

    Reply
  26. Svetlana1

    Привет! Мне надо из Предпринимателя 7.7 перекидывать отчеты по реализации в Управление торговлей 8,0 (10.2.13.1). Загрузила эту обработку, но УТ ее не открывает, пишет= Внешняя обработка не может быть прочитана текущей версией программы= Вопрос: какая нужна версия? Вся беда в том, что я не могу обновляться, не куплен диск ИТС, а сижу на работе… Можно что-либо сделать в моем случае? В конвертации пока не разобралась…

    Reply
  27. Serj kuban

    Svetlana1, конвертируй и все получиться, если что пиши на ICQ582246552 или на itt5082@mail.ru

    Reply
  28. WWW123

    А для 8.0 версия есть? или как еёе прикрутить к 8.0?

    Reply
  29. Serj kuban

    (28) конвертируй и все

    Reply
  30. Axelerator

    нСтр=тзРеквизиты.Добавить();

    нСтр[0] = «Код»;

    нСтр=тзРеквизиты.Добавить();

    нСтр[0] = «Наименование»;

    {(1)}: Индекс находится за границами массива

    Хоть ты тресни, да и как оно может работать???

    Reply
  31. Serj kuban

    народ да блин индекс убири и все

    Reply
  32. kos007

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

    Reply
  33. kos007

    при заполнении справочника номенклатура!

    Reply
  34. Nadezhda09

    Привет!

    Не получается загрузить значения с типом «Перечисление ссылка» — вид операции, форма оплаты и состояние.

    Подставляла уже и имя и синоним. Ни в какую.

    Подскажите, плиз, в чем может быть дело?

    Reply
  35. Nadezhda09

    Ой, забыла сказать, это документ «Заявка на расходование средств»

    Reply
  36. kirpich11

    народ, подскажите как убрать этот индекс плиз

    Reply
  37. T1ER

    Благодарю «плюсиком» же.

    Reply
  38. Andich

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

    Reply
  39. divalis

    Спасибо, помогло!

    Reply
  40. vv-adm

    Спасибо, полезная вещь.

    Reply
  41. vpozitive

    Спасибо, помогла ,сижу гружу и не гружусь)))

    Reply
  42. vpozitive

    Спасибо, помогла ,сижу гружу и не гружусь)))

    Reply
  43. tolinc84

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

    Reply
  44. buy_sale

    Файл обработки имеет расширение ert — для 7.7, а в описании написано для 8. Автор верни деньги!

    Reply

Leave a Comment

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