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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *