Форма М29




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

30 Comments

  1. Alxxxx74

    Отчет выдает ошибку, Поле объекта не обнаружено (КЭС_КоличествоЗатребовано)

    Reply
  2. queit

    ошибка исправлена…данная обработка создавалась для нетиповой БП(ориентирована на строительные организации) и имеет смысл, когда в табличной части документа «Требование-накладная» добавляется поле «Расход по норме», тогда в печатной форме очень хорошо виден перерасход…

    Reply
  3. Galievaor

    подскажите пожалуйста, что делать дальше когда скачала?куда этот файл?

    Reply
  4. queit

    запускаете 1с: в режиме предприятия, затем файл-открыть…

    открываете обработку и пользуетесь…

    Reply
  5. sprut1331

    Вообще классная вещь.

    Спасибо. Обработка работает как часики. спасибо ещё раз!!!!!!!!

    Reply
  6. zxcvbn

    Подскажите, пожалуйста, где можно скачать форму М29 для 1С: Бухгалтерия 7.7.

    Reply
  7. queit

    хммм…хороший вопрос =)

    если здесь нету, то можно самостоятельно написать…

    Reply
  8. Buhgalter

    Че-то не открывается форма…

    Reply
  9. Buhgalter

    Вот такая байда пишется: яяя

    Reply
  10. ves.Parnas

    (2) queit, реально для 8.0?

    Reply
  11. FOVS

    А у меня не открывает : не подходит версия .Кто поможет ?

    Reply
  12. FOVS

    Подскажите, пожалуйста. Для БХ8.2 скачать Форма М29_82? Как ей пользоваться ? Она просто не открывается . Может, я что-нибудь не так делаю ?

    Reply
  13. queit

    (12) какая у вас конфигурация?

    Reply
  14. FOVS

    Бухгалтерия предприятия 2.0.45.5

    Reply
  15. queit

    Вы скорее всего скачали обработку для Бух. 3.0. Она на управляемых формах.

    Скачайте Форма М29 для 8.1, только её один раз нужно будет в конфигураторе открыть.

    Reply
  16. FOVS

    queit, спасибо, все получилось. Ставлю плюс, очень полезная обработка.

    Reply
  17. queit

    спасибо ))) если есть какие-то пожелания, то готов реализовать совершенно бесплатно 🙂

    Reply
  18. nata1006

    Скачала, у меня конфигурация КОРП. Обработка не запускается (((

    Reply
  19. queit

    Какая у вас версия КОРП? Какую обработку вы скачали?

    По идее должно работать, но я не тестировал на КОРП (у меня отсутствует версия КОРП).

    Reply
  20. nata1006

    Добрый день!У нас версия КОРП 2.0.46.8. Скачали

    Форма М29 для 8.2 (на управляемых формах) 17.01.2013

    Форма М29 для 8.1 06.04.2012

    Не работает ни одна(

    Reply
  21. queit

    (20) По поводу корп ничего не могу сказать. Если протестировали, значит, не работает в корп )))

    Reply
  22. nata1006

    Очень и очень жаль.

    Reply
  23. kit

    Уже сам сделал, а тут нашел ваш вариант. Скачал для управляемых форм, посмотрел, всё нормально работает и даже в БП КОРП, вот только не регистрируется в штатной обработке БП 3.0 «Дополнительные отчеты и обработки». Если кому надо будет могу свой вариант выложить с регистрацией.

    Reply
  24. queit

    Да, это было бы очень хорошо.

    Reply
  25. MyPuK_OLD

    (24) queit, а на УТ 10.3 работать будет?

    Reply
  26. queit

    (25) MyPuK_OLD, скорее всего нет. Заточена под БП.

    Reply
  27. mingaleevn@mail.ru

    Спасибо! на УПП 8.2 идёт, макет можно допилить под себя…

    Reply
  28. malets

    Спасибо! Очень выручили.

    Reply
  29. queit

    Отлично 😉

    Reply
  30. user614488_OLGA4088

    не могу скачать

    Reply

Leave a Comment

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