"Монитор заказов покупателей" для конфигураций УТ и УПП




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

70 Comments

  1. support

    А можно выложить картинку какую-нибудь?

    Reply
  2. CheBurator

    ага, интересно — мы по одному направлению идем…?

    моя аотихоньку совершенствуется..

    Reply
  3. CheBurator

    представление Монитора заказов для v7.7 ТиС 9.2 здесь:

    http://www.infostart.ru/projects/?id=320

    хотелось бы, чтобы авторк, как отметил Саппорт, картинки положили — охота сравнить… а то может я вылысыпыд изобретаю.. в 8-ке все уже есть…?

    Reply
  4. CheBurator

    Ага, посмотрел. Уже понятнее с картинками…

    Reply
  5. shachneff

    В типовой УТ 10.2.9.2 вызвала ошибку {ВнешняяОбработка.МониторЗаказов}: Процедура или функция с указанным именем уже определена (ЗаполнитьТЧТовары)

    Reply
  6. VitaliySm

    2 shachneff — Исправил

    Reply
  7. VitaliySm

    В новой версии, кроме возможности анализировать заказы покупателей, появилась возможность выполнять некоторые действия с этими заказами — формировать заказ поставщику, массово закрывать или снимать резервы и размещения по выбранным заказам. Также появилась возможность отбирать заказы по номенклатурной группе, т.е. допустим выбрать все заказы в которых есть неотгруженные товары из группы «Алкоголь».

    Reply
  8. 00лекс00

    VitaliySm — продажей этого отчета занимешься ? …очень заинтересовало, но надо кое что подправить. — куплю от нее пароль за разумные деньги !

    Reply
  9. VitaliySm

    (2) 00лекс00 — у моей карточке есть контактные данные, почта и ICQ, все вопросы можно обсудить в привате

    Reply
  10. VitaliySm

    Кстати,раз уж вас интересует данная обработка, не забывайте отражать это в рейтинге, вам всёравно, а мне приятно:)

    Reply
  11. VitaliySm

    В новой версии добавлена возможность работы с выбранными заказами (снятие резервов, закрытие заказов, формирование заказа поставщику). При закрытии заказа программа предлагает указать причину закрытия. Любые действия выполняются только с теми заказами, которые отмечены галочкой. Структура подчиненности заказа перенесена на отдельную закладку, в целях оптимизации работы обработки структура формируется только при переходе на соответствующую закладку.

    В отборе по статусам появилась возможность гибче настраивать параметры выборки, раньше статусы анализировались по условию «И», т.е. «Не отгруженные» «И» «Не оплаченные», теперь можно переключиться в режим «Не отгруженные» «ИЛИ» «Не оплаченные».

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

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

    По вопросам покупки обращайтесь пока ко мне, в дальнейшем в обработке появиться ссылка на сайт и компанию, которая будет заниматься продажей.

    И не забудьте голосовать за эту обработку, если она вам понравилась:)

    Reply
  12. VitaliySm

    Исправил обнаруженные баги и наконец закончил описание (cм. справку).

    Reply
  13. VitaliySm

    Как говорится, нет предела совершенству и процессу исправления ошибок:) Немного подправленная, немного усовершенствованная версия с описанием и реестром изменений находится в архиве. Кстати не забываем голосовать:) По вопросам покупки пишите письма:)

    Reply
  14. VitaliySm

    Спасибо всем, кто голосовал за обработку. Предлагаю вашему вниманию новую версию. В версии 3.1 добавлен новый параметр анализа заказов — «Готовность заказа к отгрузке», а также исправлены обнаруженные ошибки и внесены некоторые изменения в интерфейс. Более подробное описание изменений можно найти в архиве. Кроме того, в демо версии изменено ограничение. Теперь показываются не первые 5 а первые 10 заказов.

    Reply
  15. VitaliySm

    Люди, а скажите пожалуйста, зачем вы качаете старые версии обработки? неужели самая первая версия оказалась самой удачной? со всеми ошибками, недоработками? или главое что без ограничения?:-) И если она так пользуется спросом — голосуйте

    Reply
  16. VitaliySm

    Уважаемые, пишите пожалуйста свои комментарии по работе данной разработки. Такое ощущение, что либо никто ничего не понимает в работе обработки, либо наоборот всем всё понятно и полностью удовлетворяет

    Reply
  17. VitaliySm

    Предлагаю Вашему вниманию новую версию обработки «Монитор заказов»

    Подробного перечня изменений пока нет, поэтому опишу вкратце:

    • Добавлен механизм сохранения настроек отбора и параметров формы (подробнее в форме «Сохранение настроек» во встроенной справке);

    • Контроль остатков только по доступным складам пользователя;

    • Появилась информация о том насколько просрочена оплата и/или отгрузка по заказу

    • Немного изменился интерфейс

    • В тч Товары появилось новое поле – Свободный остаток (ожидаемый) – то количество товара, что уже заказано поставщикам и не распределено по заказам покупателей, т.е. по приходу попадет в свободный остаток

    • В тч ЗаказыСписок появилась колонка в которой выводится информация о том, есть ли по заказу документ «Закрытие заказов покупателей»

    • Добавлена возможность в процедурах обработки заказов (формирование заказа поставщику, оформление реализации) использовать только указанную в параметрах отбора номенклатуру или группу

    Кроме того проведена переработка функционала для совместимости с УПП на реальной базе в реальных условиях.

    Reply
  18. Helper

    У меня не типовая УТ 8.0, но вот, что обнаружил: показывает ошибочные взаиморасчёты, когда на основании реализации заведён документ планируемого поступления ден. средств. Фактически планируемая сумма воспринимается как оплата. Соттветственно, по взаиморасчётам монитор показывает переплату.

    Reply
  19. SalOne

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

    Reply
  20. VitaliySm

    2 SalOne: Работа с полным списком заказов возможна в полной версии обработки «Монитор заказов».

    Reply
  21. looxxx

    Было бы неплохо если в параметрах выборки Номенклатуру можно было бы выбирать иерархией, списком и т.д.

    Reply
  22. VitaliySm

    to looxxx: в параметрах выборки можно выбирать элемент или группу справочника Номенклату, просто это явно не показано. Насчет списка, нужно подумать

    Reply
  23. VitaliySm

    Версия 3.5.2 предназначена для работы в конфигурации «Управление торговлей » 10.3 , платформа 8.1. Несмотря на то, что обработка имеет статус бета-версии, все функции работают. Кардинальных изменений в дизайне нет, однако полностью переписаны все алгоритмы, переработаны все запросы. Работа обработки построена на базе построителя отчета, что в свою очередь дает более расширенные возможности отбора, по сравнению с предыдущими версиями.

    Reply
  24. asu05

    Скажите пожалуйста. кем была разработана эта обработка?

    Reply
  25. VitaliySm

    (2 asu05) Обработка была разработана мной. За основу, в самом начале, была взята обработка компании РГ-Софт (адрес обработки: http://rg-soft.ru/develop/lz/lz_mz.php ), причем взята была именно идея (из описания), т.к. саму обработку я не видел. Об этом я писал ранее. Но в отличии от прототипа, в свою версию я заложил возможность не просто в удобном виде смотреть информацию по заказам, но и обрабатывать списки заказов.

    Reply
  26. VitaliySm

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

    Reply
  27. asu05

    А можно как-нибудь посмотреть модуль объекта (без пароля)?

    Reply
  28. asu05

    Я делаю обработку, с похожей процедурой,(очень удобной) как в вашей обработке МониторЗаказов, где надо вывести все подчиненные документы в одном табличном поле, при активизации строки в другом табличном поле. У меня эта процедура ни как не получается, не могли бы вы мне подсказать?..хоть что то… р.s. я просто начинающий программист 🙂

    Reply
  29. VitaliySm

    (2 asu05) пишите в icq.

    Reply
  30. am_i_evil

    в базе около 15000 заказов покупателей, и 10000 заказов поставщику. заказы закрыты документами закрытие заказов покупателей и поставщику соответственно. ну т.е. они в базе остались, но закрыты. для теста обработки сделал уже более поздней датой заказ покупателя, по нему заказ поставщику и так далее. так вот, обработка буквально на каждый «чих» (применение отбора, навигация по списку заказов) подвисает на время (около минуты), ну и потом все ок. Таким образом, если нам «в наследство» досталось большое количество заказов, то вместо удобства получаем геморрой. Я правильно понял, или я что-то делаю не так ?

    Спасибо.

    Reply
  31. am_i_evil

    пардон. тестил на тестовой базе, файловой, тормозила — смерть. на рабочей скульной попробовал — все ок. не «летает», конечно, но учитывая сколько она, видимо, делает там запросов — работать можно. вопросы: кроме закрытого модуля, какие ограничения-то ??

    Reply
  32. VitaliySm

    (2 am_i_evil) какой версией вы пользуетесь? Кроме закрытого модуля есть ещё ограничение количества заказов.

    Reply
  33. NewNick

    красиво. функциональности маловато правда.

    Монитор заказов ver 3.5.2b для УТ 10.3

    при нажатии на сформировать заказ поставщику на 50% :

    {ВнешняяОбработка.МониторЗаказов35(1126)}: Поле объекта не обнаружено (ЗаказПокупателя)

    Reply
  34. VitaliySm

    2 NewNick — какого функционала по вашему не хватает?

    Reply
  35. zhadan

    А я что то так и не понял, как он делает отбор заказов….((((

    Reply
  36. VitaliySm

    (39) что конкретно не понял?

    Reply
  37. zhadan

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

    Reply
  38. zhadan

    а да забыл сказать что тестил вот эту версию «Монитор заказов ver 3.5b для УТ 10.2» на УТ 10,2

    Reply
  39. gavril

    Я так понял разработчики в запросе ограничились первыми 10-тью записями.

    Потому там не все заказы, а только те которые формируют первые 10 движений регистра «Заказы покупателей».

    За остальное наверное просят денежку. Но обработка рульная 😉

    Reply
  40. VitaliySm

    В новой версии исправлены все известные ошибки, оптимизированы некоторые механизмы. Есть возможность менять размер таб.части.

    Reply
  41. noblekey

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

    Reply
  42. VitaliySm

    К (45) — КАКАЯ КОНФИГУРАЦИЯ И РЕЛИЗ?

    Reply
  43. noblekey

    УТ 10.3.3.1

    Reply
  44. VitaliySm

    на УТ 10.3.5 тестил, всё нормально было.

    Reply
  45. noblekey

    Для моей конфиги надо просто эту переменную закоментировать в запароленном модуле

    Reply
  46. VitaliySm

    (49) скачай ещё раз, я обновил.

    Reply
  47. Asdam

    При использовании обработки «Монитор заказов ver 3.5.3 для УТ 10.3, УТдУ 2.3, УТПдУ, УПП 1.2» в конфигурации «Управление торговым предприятием для Украины (1.0.8.4)» статус оплаты всех заказов «Не оплачено» и при переходе на закладку «Структура подчиненности заказа» вываливается ошибка:

    {ВнешняяОбработка.МониторЗаказовПокупателей(2329)}: Поле объекта не обнаружено (УпаковочныйЛист)

    Reply
  48. ManSound

    В обработке некорректно рассчитываются суммы взаиморасчетов. Например, если по одному заказу выдано расходником контрагенту не указанному в заказе, а потом этот долг по этому заказу перенесен (Корректировка долга), то суммы взаиморасчетов увеличиваются (данные не совпадают с отчетами). Необходимо запросом вытаскивать информацию о взаиморасчетах с конкретным контрагентом по конкретному заказу, а не просто по заказу в целом.

    Reply
  49. vint1999

    Пробовал обработку v3.5.b и v3.5.3 для УТ 10.3, в последней почему то все заказы неоплачены. (((

    Reply
  50. ufkjxrf

    Хотелось, чтобы выводился полный список заказов…

    Reply
  51. AlikK

    (54) — смотри ответ в вверху страницы — (43)

    Reply
  52. AlikK

    Что добавлено в релизе за 8.12.09 ?

    Reply
  53. VitaliySm

    (56) в каком релизе?

    Reply
  54. AlikK

    В обновлении за 8.12.09

    Reply
  55. Re:аниматор

    1. Обработка открывалась минут 3-5

    2. Перемещение от одной строки к другой строке окала 3-5 минут

    3. Продажа в тихушку через личку?

    4. Если ограничено 10 то обработка платная, то где цена и статус что в магазине?

    Reply
  56. VitaliySm

    (59) а какую версию обработки ты скачал? такие параметры открытия и перемещения строк могли быть на каких-то устаревших версиях.

    Reply
  57. Re:аниматор

    (60) скачал по основной кнопке 3.5.3

    Reply
  58. alkolok

    скачал версию 3.5.3, попробовал на версии УТ 10.3.9.4, появилось только 10 заказов, если это ограничение, то в какой версии его нет??

    Reply
  59. daddy-don

    Старые (до 3.5.3) тормозят нещадно, такое ощущение в процессе обработки — куча ненужного кода (запросов) че-то делают, и 80% процессинга — пшик.

    Reply
  60. wwizard

    надо посмотреть

    Reply
  61. dufrein

    Какая версия подойдёт для УПП 1.3 ?

    Reply
  62. dufrein

    Вот такую обработку я давно искал, спасибо автору

    Reply
  63. dufrein

    Плюс в карму однозначно

    Reply
  64. VitaliySm

    (67) dufrein, думаю подойдет, но проверить не могу, ибо нет у меня такой конфигурации 🙁

    Reply
  65. coolvic

    Скачал Монитор заказов ver 3.5.3 для УТ 10.3. У меня УТ 10.3, 1С 8.2. Платежки к заказам прикреплены, а в мониторе показывает, что оплаты по заказам нет и отгружен излишек. Что не так, подскажите, пожалуйста!

    В остальном вроде все неплохо сделано.

    Reply
  66. 6JIoHguH

    Автору огромная благодарность! Только у меня один вопрос, почему оплата отслеживается только по приходным кассовым ордерам, а по платежным поручениям нет? Или это у меня что-то не так? Хотя в платежном поручении документ заказ стоит.

    Reply
  67. Михайловна

    А разве это не стандартная обработка — рабочий стол менеджера по закупкам?

    Reply
  68. oao-es

    (33) как можно получить доступ к модулю объекта?

    Reply
  69. c00lwork

    3.5.3 не видит оплаты …

    Reply
  70. vzk.w

    Не красиво прятать код, тем более прятать там подвох.

    Продавать изделие в котором прописано получать результат только первых 10………….

    Жульничество…………

    Совет всем, если не уверены что сможете исправить косяки этого разработчика, не скачивайте!

    Reply

Leave a Comment

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