Закрытие заказов покупателей УТ 11.1 11.2-11.4 ERP 2.2-2.4




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

35 Comments

  1. glime

    Хоть ктонить оставте отзыв, работает не работает, что бы хотелось увидеть в следующей версии

    Reply
  2. vyacheslavk

    Прикрепите пожалуйста демо-ролик

    Reply
  3. glime

    (2) vyacheslavk, что конкретно должен содержать деморолик? обработка до безобразия простая, если что то не понятно, то спрашивайте.

    Reply
  4. vyacheslavk

    (3) в УТ 11.1 при разнесении проплаты (ПКО) в зачет идут заказы, а не по факту реализации.

    И получится что при закрытии заказов будет висеть кредиторская задолженность по этим заказам.

    Было бы актуально автоматизировать и переформирование ПКО.

    Или же этот механизм как-то организован в УТ 11.1?

    Reply
  5. vyacheslavk

    У меня возникла необходимость в такой обработке, но возникли некие технические трудности:

    1. для закрытия заказов Вы используете функцию: ПродажиСервер.ОтменитьНепоставленныеСтроки(ЗаказКлиентаОбъект, «Товары», ПричинаОтмены, Истина);

    или же у Вас по другому организовано?

    Reply
  6. glime

    (5) vyacheslavk, данная функция (ОтменитьНепоставленныеСтроки) появилась намного позже, не помню с какого релиза, чем была написана обработка, потом многие перепаханные конфы, не обновляются, так что написано собственными руками.

    Reply
  7. glime

    (4) vyacheslavk,

    Было бы актуально автоматизировать и переформирование ПКО.

    Или же этот механизм как-то организован в УТ 11.1?

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

    Reply
  8. revril

    Каким документов происходит закрытие заказа?

    Reply
  9. glime

    (8) в УТ 11 по ее методологии документа нет в принципе, изменение все в документе заказа.

    Reply
  10. iov

    {ВнешняяОбработка.ЗакрытиеЗаказовПокупателей.МодульОбъекта(343)}: Ошибка при вызове метода контекста (Выполнить)

    Результат = Запрос.Выполнить();

    по причине:

    {(50, 34)}: Поле не найдено «ТаблицаЗаказа.Упаковка.Коэффициент»

    ЕСТЬNULL(ТаблицаЗаказа.Упаковка.<<?>>Коэффициент, 1) КАК УпаковкаКоэффициент,

    не работает.

    Управление торговлей, редакция 11.2 (11.2.2.106)

    Reply
  11. glime

    сегодня тестану,писалось еще под 11.1

    Reply
  12. Aether

    Привет!

    Как прошло тестирование под 11.2?

    Еще в нагрузку: закроет ли обработка заказ, который был отгружен полностью, но далее по нему была сделана корректировка реализации?

    Reply
  13. ssn5810

    не исправлено !!!! мало кто остался на 11.1, или обработку нужно исправить под 11.2 или удалить !!!

    {(50, 34)}: Поле не найдено «ТаблицаЗаказа.Упаковка.Коэффициент»

    ЕСТЬNULL(ТаблицаЗаказа.Упаковка.<<?>>Коэффициент, 1) КАК УпаковкаКоэффициент,

    не работает.

    Управление торговлей, редакция 11.2 (11.2.3.163)

    Reply
  14. M_Volkov

    (13)

    не работает. Управление торговлей, редакция 11.2

    Жаль конечно, уже для для УТ11.3 надо. Сбрось обработку мне на mv@olympus.ru, может удастся ее поправить…

    Reply
  15. ssn5810

    Спасибо, уже не надо….

    Reply
  16. M_Volkov

    (15) Мне и другим надо, если автор не хочет… Не писать же с нуля!?

    Reply
  17. glime

    Добрый день.

    Под 11.3 будет на следующей недели.

    Reply
  18. M_Volkov

    (17)

    Под 11.3 будет на следующей недели.

    Хорошо, подожду… Но судя по картинке обработки, в ней нужно что-то делать, галочки расставлять? Позвольте выразить пожелание: обработка должна иметь фоновый режим, запускаться по расписанию (например, по утрам), выполняться без участия пользователей. В форме обработки настраиваться только «Количество дней отсрочки» (например, 3 — 5 дней), на тот случай, если пользователи не ставят дату отгрузки (срок исполнения равен дате заказа, или «Резервировать к дате» — дате ожидания товара от поставщика). Все просроченные заказы более «Количество дней отсрочки» должны закрываться.

    Заранее благодарю (предлагаю свои услуги по тестированию обработки на реальных базах).

    Reply
  19. glime

    (18) обработка имеет фоновый режим, и закрывает в автомате все заказы(см 3 скрин, при регистрации обработки нужно выставить нужные параметры расписания старта), по которым оплаты равны отгрузкам, в случаи если оплаты не равны, придется принимать решения самостоятельно. (А вдруг аванс весит, или отгрузили только частично)

    Параметр отсрочки запоминается и учитывается при автоматическом закрытии

    Reply
  20. M_Volkov

    (19)

    закрывает в автомате все заказы(см 3 скрин…

    Склины будут?

    Reply
  21. glime

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

    и читай дальше, » по которым оплаты равны отгрузкам»

    Reply
  22. maxpower

    на 11.1.10.199 не пашет.

    Пишет «Значение индекса выходит за границы диапазона»

    база серверная , 8.3.8.2027

    Reply
  23. glime

    (22)добрый день, нет возможности пртестировать. более подробно, можно ошибку?

    Reply
  24. xakersha

    добрый день, эта обработка подойдет под 11.4?

    Reply
  25. glime

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

    Reply
  26. user623839_662660

    Добрый день!

    К сожалению обработка не закрывает строки которые поставлены в Резерв, это можно исправить?

    Reply
  27. glime

    Добрый, было такое требование у заказчика, поправить можно. Вечером поправлю, выложу.

    Reply
  28. baltexpert_39

    Было бы хорошо если обработка закрывала бы полностью отгруженные заказы.

    Reply
  29. baltexpert_39

    (19)Где для фонового режима поставить количество дней?

    Reply
  30. glime

    (29) а откройте в режиме обычном, установите дату, система запомнит ее.

    Reply
  31. AlexeyT1978

    будет работать на УТ 11.4.6.188 ?

    Reply
  32. glime

    Добрый день. работает на 11.4.5.118.

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

    Reply
  33. AlexeyT1978

    (32) подскажите, пожалуйста, а по какому принципу обработка ставить галочку на заказ, что его нужно обрабатывать?

    Reply
  34. glime

    (33) Если нет оплаты или же оплата равна отгрузки

    Reply
  35. glime

    Если нет оплаты или же оплата равна отгрузки, все прочие не ставит, так же предусмотрен автоматический режим, см. описание.

    Reply

Leave a Comment

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