Усилим ДАО менеджера! Простые отчеты и обработки для УТ и КА (от Анны)




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

38 Comments

  1. O-Planet

    Присоединюсь. Автору — спасибо! 🙂

    Reply
  2. DoctorRoza

    Спасибо зпт заценю зпт если делала Анна зпт то кто такой Oleg в заголовке авторства впрсзн 🙂

    Reply
  3. O-Planet

    (3) Йа 🙂

    Reply
  4. FE_D_OR83

    Ёптыть, опять реклама. Скоро инфостарт совсем помойкой станет.

    Reply
  5. FE_D_OR83

    Мало того что выкладывая в общий доступ отбирают хлеб у других программистов, так ещё и рекламируют ООО «О-Планет». «Бизнес и ничего личного».

    Reply
  6. O-Planet

    Выкладываем в общий доступ, потому что не жадные — это раз. И потому что считаем, что такое продавать — смешно. Ну и действительно, реклама. А что не так? У нас на Инфостарте имеются коммерческие разработки, продавать которые мы заинтересованы. Потому привлекаем к себе внимание, раздавая подарки. Если наши подарки у кого-то отнимают хлеб, то извините. Запасайтесь сухарями… 😉

    Reply
  7. pumbaE

    Сделали бы, один архивчик, что-ли…

    Reply
  8. FE_D_OR83

    (8) Так я пишу что инфостарт превращается в помойку.

    Reply
  9. O-Planet

    (10) А из-за чего такое мнение? Что, к нашим обработкам есть какие-то претензии? Будем рады выслушать и принять к сведению.

    Reply
  10. alexk-is

    (11) А что у Вас с кнопками? Они заболели и опухли? 🙂

    Reply
  11. AlexO

    (3) DoctorRoza,

    то кто такой Oleg в заголовке авторства впрсзн

    я уже давно предложил выкладывать разработки девушек — от них лично.

    Но постоянно все выкладывается исключительно и только под ником «О_Планет».

    В цепях он их держит, что ли? И выводит фотографироваться для инфостарта?

    Reply
  12. iov

    (6) FE_D_OR83, Реклама с готовыми (пусть и не самыми нужными обработками) это лучше чем просто реклама!

    Reply
  13. iov

    (7) FE_D_OR83, Это не хлеб это крошки. А вот жадничать я бы не советовал.

    Reply
  14. iov

    (0) Обработки из серии а кто-то да спросит… Но отдельно за халяву + .

    P.S. Брал коммерческие обработки автора — в целом отзывы положительные. А вот «обкладываться» девушками видимо стало модно в среде 1с компаний разработчиков. Это я так завидую по белому…

    Reply
  15. O-Planet

    (17) Может, и стало модно, но не в нашем случае. У нас это — сотрудники такие 🙂 И они многим парням фору дадут. (6) FE_D_OR83,

    Reply
  16. O-Planet

    (12) Да, кнопки — это тема. Но чувство пропорции у девушек и нас наверное разное 🙂 Зато не промахнуться. В глаза бросается. Практично!

    Reply
  17. Ish_2

    Как руководитель своего предприятия Олег — Молодец !

    Умение работать с людьми — это на 90 % умение работать с женщинами.

    То бишь привлекать и заинтересовывать.

    Reply
  18. volsh77

    Тестировал «Закрытие заказов покупателей УТ». А почему одним документом «Закрытие заказов покупателей» нельзя несколько заказов закрыть, зачем создавать каждый раз новый документ закрытия. Это женская логика?!

    Reply
  19. fomix

    >> табличные части которые нужно подвергнуть «инкорнации» … (из текста рекламы). Дальше уже читать не стал! Буковок много.. У автора явно что-то с русскому языку не очень! На курсы языка бы сходили что ли или программу орфографии использовали.

    Reply
  20. AlexO

    (21) fomix,

    У автора явно что-то с русскому языку не очень!

    да боюсь, и тексты писали девушки.. только вьетнамские, которых после пошива курток заставили у О-Планет тексты писать…. 🙂

    Reply
  21. O-Planet

    (21) У автора явно что-то с русскому языку не очень

    Мде…

    (22) Не. После пошива курток они еще машины моют сперва, а только потом нам тексты пишут. И с нами работают исключительно китаянки.

    Reply
  22. O-Planet

    вот одна из них…

    Reply
  23. AlexO

    (24)

    ну, красивая девочка с востока (насчет китаянки — еще вопрос спорный).

    Взяли с обложки местного журнала? 🙂

    Reply
  24. djd.sf

    (25)

    ну, красивая девочка с востока (насчет китаянки — еще вопрос спорный).

    Взяли с обложки местного журнала? 🙂

    ничего не спорный, это мисс мира. гуглится менее чем за минуту.

    http://top-antropos.com/history/21-century/item/335-yu-wenxia-miss-mira-2012

    Reply
  25. AlexO

    (26) djd.sf,

    вообще последняя тема разговора — про девушек из команды О-Планет 🙂

    Если у него еще и «мисс мира» работают.. то пусть не прибедняется «езжу на велосипеде и вообще — веду себя скромно» :))

    Reply
  26. djd.sf

    (27) причем здесь последняя тема разговора, когда я отвечал на ваше сообщение

    O-Planet,

    ну, красивая девочка с востока (насчет китаянки — еще вопрос спорный).

    Взяли с обложки местного журнала? 🙂

    , которое относилось к сообщению 24.

    Reply
  27. AlexO

    (28) djd.sf,

    во-первых, непонятно, на что вы отвечали 🙂

    во-вторых — разговаривали про контору О-Планет

    в-третьих — Ю Веньсян вполне может оказаться китаянкой с русско-татарскими корнями. На лице написано.

    в-четвертых — мое сообщение (25) — это на (23)

    И с нами <конторой О-Планет, прим. мое> работают исключительно китаянки.

    и (24)

    вот одна из них…

    если уж сами не можете разобраться в наших столь хитрозапутанных разговорах :))

    Reply
  28. djd.sf

    (29) похоже вы головой очень сильно в детстве ударились.

    Reply
  29. AlexO

    (30) djd.sf,

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

    Reply
  30. O-Planet

    (30) Хм… Задумался…

    Reply
  31. volsh77

    :)) сразу видно, мужики на женщин реагируют :). Нет по теме писать сообщения, но уже обсуждаем «вьетнамско-китайских» девушек эмо…шутка. Разговор плавно перейдет на величину груди? ширину бедер и толщину губ…какие еще параметры для запроса?! Аа, голубые , серые или карие глаза, а может зеленые. Длинные волосы или короткая прическа. Запрос может выдать неоднозначный результат 🙂 ..вообщем это шутка.

    Reply
  32. volsh77

    Ааа, тема должна была начинаться «Усиливаем либидо программиста — увеличиваем ДАО менеджера!» опять ,шутка!

    Reply
  33. O-Planet

    34) А я и не знал, что это еще называют ДАО… ))

    Reply
  34. babys

    У части организаций номер заказа это постоянный параметр, у некоторых его знает даже заказчик/подрядчик, и так фривольно обращаться с ним как в первой обработке низзя 🙂

    Reply
  35. O-Planet

    … А если продолжать говорить о мисс мира, то честно — не совсем понимаю, зачем китаянке европейская прическа и макияж. По-моему, только портит.

    Reply
  36. zzz_natali

    Обработка ОбъединениеТЧ не выводит сумму результирующего документа, если выставлена опция «по средним ценам первичных документов». Нельзя ли перетряхнуть бабушкин тулуп, чтобы работало? Спасибо.

    (пробовалось на документе Реализация; КА1.1.40.2)

    Reply
  37. ntx

    нет контроля уже закрытых

    сыплет ошибки по контрагентам

    за что сняли 50 руб не понятно

    Reply
  38. wenser

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

    Reply

Leave a Comment

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